打印调用函数的文件名,行号和函数名 – 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__
等,以确保它们具有正确的值。