12.1.2 #运算符
如果在宏定义中参数之前放置一个#,那么在调用该宏时,预处理程序将根据宏参数创建C风格的常量字符串。例如,定义:
define str(x)#x
使得预处理程序将随后的调用
str(testing)
扩展为
“testing”
因此printf调用
printf(str(Programming in Objective-C is fun.\n));
等价于
printf(“Programming in Objective-C is fun.\n”);
预处理程序在实际的宏参数两侧插入双引号。参数中的任何双引号或反斜线符号都是预处理程序的保留字符。所以
str(“hello”)
将产生
hello\“
下面这个宏定义是使用#运算符的更实用例子:
define printint(var)printf(#var“%i\n”,var)
该宏用于显示整型变量的值。如果count是值为100的整型变量,那么语句
printint(count);
将扩展为
printf(“count”“%i\n”,count);
编译器把两个相邻的字符串连接到一起,形成单个字符串。因此,对两个相邻的字符串执行连接之后,语句将变成下面的样子:
printf(“count=%i\n”,count);