1. ##连接符的用法
在C语言中,## 连接符号由两个井号组成,其功能是在带参数的宏定义中将两个子串(token)联接起来,从而形成一个新的子串,一般跟在宏定义参数的前面。
2.#转换符的用法
#转化符是将传递的参数作为字符串来进行处理。
例如定义如下宏:
#define pasrse( i ) printf( "token" #i " = %d", token##i ) //同时定义如下的变量 int token1 = 1;
则调用parse(1)的打印结果为:
#宏展开: printf("token" "1" "= %d", token1); token1=1
3.宏定义的可变参数
在宏定义中使用可变参数,只需在参数后面加入”…”,然后使用##连接即可
例如下面的例子:
#define LOG_INFO(fmt, args...) \ do { \ log_write("LOG_INFO", __func__, __FILE__, __LINE__, fmt, ##args); \ }while(0) //其中log_write的原型为: void log_write(const char *level, const char *func, const char *file, int line, const char *fmt, ...);