·#運算符用於預處理器期將宏參數轉換爲字符串
·#的轉換做用是在預處理器完成的,所以只在宏定義中有效
·編譯器不知道#的轉換做用
·用法:code
printf("%sn",STRING(HELLO World!)); 字符串
例子25-1:編譯器
int main()
{io
printf("%s\n",STRING(Hello world!)); printf("%s\n",STRING(100)); printf("%s\n",STRING(While)); printf("%s\n",STRING(return)); return 0;
}
輸出結果:
Hello world!
100
While
return編譯
例子25-2:function
int square(int n)
{di
return n * n;
}
int func(int x)
{co
return x;
}
int main()
{字符
int result = 0; result = CALL(square, 4); //result = (printf("Call funtion %s\n","square"),square(4)); printf("result = %d\n",result); result = CALL(square, 10); printf("result = %d\n",result);
}
輸出結果:
Call function square
result = 16
Call function square
result = 100運算符
·##運算符用於預處理器粘連兩我的標識符
·##的鏈接做用是在預處理器期完成的,所以只在宏定義中有效
·編譯器不知道##的鏈接做用
·用法
int CONNECT(a,1); //int a1;
a1 = 2;
例子25-3:
int main()
{
int NAME(1); int NAME(2); NAME(1) = 1; //name1 = 1; NAME(2) = 2; //name2 = 2; printf("%d\n",NAME(1)); printf("%d\n",NAME(2));
}
輸出結果:
1
2
例子25-4:
STRUCT (Student)
{
char *name; int id;
}
int main()
{
Student s1; Student s2; s1.id = 0; s1.name = "S1"; s2.id = 1; s2.name = "S2"; printf("s1.name = %s\n",s1.name); printf("s1.id = %d\n",s1.id); printf("s1.name = %s\n",s1.name); printf("s1.id = %d\n",s1.id); return 0;
}
小結:
編譯器不知道#和##運算符的存在