#操作符作用于预处理期将宏参数转换为字符串。转换作用是在预处理期完成的,因此只有在宏定义中才有效。编译器不知道#的转换作用。
比如
#define STRING(x) #x
printf("%s\n",STRING(Hello world);
##运算符是将两个符号粘连在一起。同样是预处理期完成的因此在宏定义中有效。
#define NAME(n) name##n
int NAME(1);//name1
int NAME(2);//name2
NAME(1) = 1 ;
NAME(2) = 2;
printf("%d\n",NAME(1));
printf("%d\n",NAME(2));
这个##操作符的妙用
#define STRUCT(name) typedf struct _tag_##name name; \
struct _tag_##name
STRUCT(student)
{
char* name;
int id;
};
int main()
{
student s;
s.name = "zhangsan";
s.id = 110;
printf("%s\n",s.name);
printf("%d\n",s.id);
return 0;
}
学习交流群 199546072