C语言宏定义
1 #include<stdio.h> 2 #include<unistd.h> 3 4 /* #是"字符串化"的意思,出现在宏定义中的#是把跟在后面的参数转换成一个字符串 */ 5 #define LOG_ERROR(err) fprintf(stderr, #err) 6 7 /* "##"是一种分隔连接方式,它的作用是先分隔,然后进行强制连接. */ 8 #define test(type, name) type type##_##name 9 #define test2(type, name) type type_##type##_name_##name 10 11 void main(void) 12 { 13 test(int, num); 14 test2(int, num); 15 LOG_ERROR(1234); 16 }
以上代码段 test.c 经过宏展开后的代码如下:
/* gcc -E test.c */ void main(void) { int int_num; int type_int_name_num; fprintf(stderr, "1234"); }