#运算符
#运算符用于在预处理期将宏参数转换为字符串
#的转换作用是在预处理期完成的,因此只在宏定义中有效
编译器不知道#的转换作用
1 #define STRING(x) #x2 printf("%s\n",STRING(Hello World!));
##运算符
##运算符用于在预处理期粘连两个标识符
##的连接作用是在预处理期完成的,因此只在宏定义中有效
编译器不知道##的连接作用
1 #include<stdio.h> 2 #define STRUCT(type) typedef struct _tag_##type type;\ 3 struct _tag_##type 4 STRUCT(Student) 5 { 6 char *name; 7 int id; 8 } 9 10 int main() 11 { 12 Student s1; 13 Student s2; 14 s1.name = "s1"; 15 s1.id = 0; 16 s2.name="s2"; 17 s2.id = 1; 18 printf("s1.name = %s\n",s1.name); 19 printf("s1.id = %d\n",s1.id); 20 printf("s2.name = %s\n",s2.name); 21 printf("s2.id = %d\n",s2.id); 22 return 0; 24 }