跨行的宏定义
跨行宏定义使用反斜杠\
连接
#define YW_GPIO_ERR(...) do{\
printk("[yw_gpio][err] [%d] ", __LINE__);\
printk(__VA_ARGS__);\
}while(0)
"#"使用
功能:用来把参数转化成字符串
示例代码
#define P(A) printf("%s:%d\n",#A,A);
int main(int argc, char **argv)
{
int a = 1;
P(a);
system("pause");
}
__VA_ARGS __
是一个可变参数的宏,很少人知道这个宏,这个可变参数的宏是新的C99规范中新增的,目前似乎只有gcc支持(VC6.0的编译器不支持)。
实现思想就是宏定义中参数列表的最后一个参数为省略号(也就是三个点)。
#include<stdio.h
#define YW_GPIO_ERR(...) do{\
printf("[yw_gpio][err] [%d] ", __LINE__);\
printf(__VA_ARGS__);\
}while(0)
int main(void)
{
YW_GPIO_ERR("out of ioctl_tab \n");
return 0;
}