#运算符
#define PSQR (x) printf ("The square of X is %d.\n",((x)*(x)));
如果这样使用宏:
PSQR(8);
则输出为:
The square of X is 64.
在类函数宏的替换部分中,#运算符用作一个预处理运算符,它可以把语言符号转化为字符串,例如,如果x是一个宏参量,那么#x可以把参数名转化成相应的字符串。该过程称为字符串化。
/*subst.c--在字符串中进行替换*/
#include <stdio.h>
#define PSQR(x) printf("The square of " #x "is %d.\n",((x)*(x)))
int main(){
int y=5;
PSQR(y);
PSQR(2+4);
return 0;
}
输出如下:
The square of y is 25.
The square of 2+4 is 36;
第一次调用宏时,用"y"代替#x;第二次调用宏时,用"2+4"代替#x。ANSI C的字符串连接功能将这些字符串与printf()语句中的其他字符串组合以产生最终使用的字符串。例如,第一次调用变成:
printf("The square of " "y" " is %d.\n".((y)*(y)));
接着,字符串连接功能将这三个相邻的字符串转换为一个字符串:
"The square of y is %d.\n"