Imprima el nombre del archivo, el número de línea y el nombre de la función de una función de llamada – C Prog.

Quiero crear un archivo log.c que contenga las funciones info (), debug () y error (). Estas funciones funcionan sin imprimir el nombre del archivo, el número de línea, etc. etc. Entonces, cuando llamo a una de estas funciones, quiero volcar el nombre del archivo, el número de línea y el nombre de la función de la persona que llama. Entonces, ¿cómo podemos rastrear exactamente? ¿Hay una manera de rastrear en C o, si usamos macros, cómo se puede hacer esto?

Pasaría los datos a la función a través de parámetros (tal vez obtenga la ayuda de una macro)

int info(const char *fname, int lineno, const char *fxname, ...) { /* ... */ } int debug(const char *fname, int lineno, const char *fxname, ...) { /* ... */ } int error(const char *fname, int lineno, const char *fxname, ...) { /* ... */ } 

Y llamarlos

 info(__FILE__, __LINE__, __func__, ...); debug(__FILE__, __LINE__, __func__, ...); error(__FILE__, __LINE__, __func__, ...); 

Nota: __func__ es C99; gcc, en el modo C89 tiene __FUNCTION__

Si usa macros, creo que puede hacer que esto funcione usando __FILE__ , __LINE__ y __FUNCTION__ . Por ejemplo,

 #define INFO(msg) \ fprintf(stderr, "info: %s:%d: ", __FILE__, __LINE__); \ fprintf(stderr, "%s", msg); 

También podría usar funciones, pero tendría que pasar __FILE__ , etc. para asegurarse de que tuvieran el valor correcto.