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

时间:2012-01-16 18:07:29

标签: c

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

2 个答案:

答案 0 :(得分:28)

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

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__

答案 1 :(得分:7)

如果您使用宏,我相信您可以使用__FILE____LINE____FUNCTION__来完成这项工作。例如,

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

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