¿Cómo saber qué funciones están presentes en qué archivo de encabezado en el código fuente de C?

Tengo el siguiente código:

#include #include int main() { printf("Checking\n"); exit(0); } 

Antes del código fuente, tengo dos funciones, una es printf () que está presente en el archivo de encabezado stdio.h. La segunda es la función exit () que está presente en el archivo de encabezado stdlib.h.

Ahora quiero que la salida para este progtwig sea:

La función printf () está presente en stdio.h

La función exit () está presente en stdlib.h

¿Hay alguna manera de averiguar esto?

Realmente no hay una forma portátil de hacer esto, ya que el texto del encabezado ni siquiera necesita existir en un archivo. Es bastante aceptable según el estándar para el #include simplemente modificar el entorno sin hacer referencia a un archivo de cabecera real específico, por lo que, en ese caso, no tiene acceso fácil a la información de un progtwig.

En términos de averiguar si el texto del encabezado está disponible, esto podría ir desde una simple búsqueda de texto (es probable que tenga falsos positivos ya que puede haber un comentario sobre printf en el archivo de encabezado math.h ) hasta un analizador C-aware completo. (probablemente sea complicado).

Alternativamente, usted podría simplemente (manualmente) hacer referencia al estándar real, ya que esos detalles están disponibles allí, a la:

 7.21.4.1 The remove function Synopsis #include  int remove(const char *filename); 

Este pequeño fragmento de C11 significa que la función de remove se puede encontrar en stdio.h .

Y, si aún desea una forma de hacer esto dentro de un progtwig, simplemente reúna todos los conocimientos del estándar en un archivo o estructura de datos (como una matriz asociativa) y escriba un código para buscar un identificador determinado, en la línea de

 #include  #include  const char *lookFor (const char *ident) { // These should have ALL identifiers and their // equivalent headers. static const char const *identifier[] = { "remove", "strcpy", ... }; static const char const *header[] = { "stdio.h", "string.h", ... }; assert (sizeof(identifier) == sizeof(header)); for (size_t i = 0; i < sizeof(header) / sizeof(*header); i++) if (strcmp (ident, identifier[i]) == 0) return header[i]; return NULL; }