今天看到这样一段代码,值摘取其中宏定义的部分,如下:
#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);
}
本文介绍了如何使用宏定义DEBUG来替代printf()函数,详细解释了宏中的fmt、#fmt和##args的作用。fmt作为宏定义的第一个参数,#fmt将其转换为字符串输出,##args用于处理可变参数列表,当没有参数时移除前导逗号。
1150

被折叠的 条评论
为什么被折叠?



