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);