打印调用函数的文件名,行号和函数名 – C Prog

我想创建包含info(),debug()和error()函数的log.c文件。 这些function无需打印文件名,行号等。 因此,当我调用此函数之一时,我想转储调用者的文件名,行号和函数名。 那么我们如何准确追溯? 有没有办法追溯C,或者,如果我们使用宏,如何做到这一点?

我通过参数将数据传递给函数(也许得到宏的帮助)

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, ...) { /* ... */ } 

并打电话给他们

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

注意: __func__是C99; gcc,在模式C89中有__FUNCTION__

如果您使用宏,我相信您可以通过使用__FILE____FUNCTION____FUNCTION__来完成此工作。 例如,

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

您也可以使用函数,但是您需要传入__FILE__等,以确保它们具有正确的值。