3.#运算符
出现在宏定义中的#运算符把跟在其后的参数转换成一个字符串 。有时把这种用法的#称为字符串化运算符。例如:
#definePASTE(n)"adhfkj"#n
main()
{
printf("%s/n",PASTE(15));
}
宏定义中的#运算符告诉预处理程序,把源代码中任何传递给该宏的参数转换成一个字符串。所以输出应该是adhfkj15。
4.##运算符
##运算符用于把参数连接到一起 。预处理程序把出现在##两侧的参数合并成一个符号 。看下面的例子:
#define concat(a,b) a##b
如果写
printf("%s/n", concat("x","y"));
这样是会编译报错的。
pasting ""x"" and ""y"" does not give a valid preprocessing token
确实不是很懂。
例子:
#include <stdio.h>
#define PASTE(name) "Obj_"#name
#define concat(a,b) a##b
int main()
{
int xy = 9;
printf("%s/n", PASTE(Test));
printf("%d/n", concat(x,y));
return 0;
}