参数不确定的宏定义

来源:互联网 发布:进销存 知乎 编辑:程序博客网 时间:2024/05/16 06:49

在很多项目中,不管是记录日志还是打印错误信息到标准(错误)输出,为了能尽快定位到代码所在位置,可能需要记录或者打印代码所在文件和行数等信息。当然我们可以这样做:

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);   \
}

 

对于符号##还不太清楚的朋友,可以参考上一篇文章《宏定义中的#、##和#@符号》。

可能很多朋友在平时学习或者项目中都可能会遇到这样的情况,所以在这做一个简单的笔记,希望对有需要的朋友有所帮助。