在很多项目中,不管是记录日志还是打印错误信息到标准(错误)输出,为了能尽快定位到代码所在位置,可能需要记录或者打印代码所在文件和行数等信息。当然我们可以这样做:
printf("%s(%s:%d): %s\n", __FILE__, __FUNCTION__, __LINE__, err_msg);
或者
fprintf(fp, "%s(%s:%d): %s\n", __FILE__, __FUNCTION__, __LINE__, log);
但是,每一处代码都需要添加文件、函数名和行数等信息,是否觉得比较麻烦呢?接下来,我们提供一种通过定义宏的方法来解决这个问题。实现很简单,如下:
#define PRINT(format, args...) \
{ \
char temp[128] = "%s(%s:%d): "; \
strcat(temp, format); \
printf(temp, __FILE__, __FUNCTION__, __LINE__, ##args); \
}
对于符号##还不太清楚的朋友,可以参考上一篇文章《宏定义中的#、##和#@符号 》。
可能很多朋友在平时学习或者项目中都可能会遇到这样的情况,所以在这做一个简单的笔记,希望对有需要的朋友有所帮助。