宏定义DEBUG()代替printf()

来源:互联网 发布:淘宝开店申请要多久 编辑:程序博客网 时间:2024/06/05 08:53

今天看到这样一段代码,值摘取其中宏定义的部分,如下:

#define DEBUG(fmt,args...) printf("%s(%d)-%s -> " #fmt "\n", __FILE__, __LINE__, __FUNCTION__, ##args);


相信很多初入编程界的新人朋友们(我也是新人,汗。。。),看到这就会有疑问:

1.fmt及#fmt是什么?  2.##args是什么?


在此对这些问题做一个容易理解的解释:

1.fmt就是宏定义的第一个参数,在代码中展开时直接代入,需注意的是#fmt的意思为把fmt传进来的内容以字符串形式输出。

2.args..代表一个可变化的参数表,##args如果前面的可变参数被忽略或为空,“##”操作将使预处理器去除掉它前面的那个逗号。如果你在宏调用时,确实提供了一些可变参数,它会把这些可变参数放到逗号后面。


#include <stdio.h>
#include <stdlib.h>


#define DEBUG_PRINT(fmt,args...) printf("%s(%d)-%s -> " #fmt "\n", __FILE__, __LINE__, __FUNCTION__, ##args);


void main(void)
{
    char a = 'T', b = 'e', c = 's', d = 't';
    DEBUG_PRINT(%c%c%c%c,a,b,c,d);
}