假设我们定义了这样一个宏:
#define my_output(name) printf(#name ": %d\n", name)
当我们调用这个宏的时候,例如:
my_output(height);
预处理器会把这个语句扩展成
printf("height" ": %d\n", height);
当我们要输出变量或者符号常量的值以及其相应名字的时候,这个小技巧就为我们提供了便利。我们只需要写一次那个名字,剩下的就交给预处理器来处理了。
#name 中的 # 是字符串产生运算符(string-creation operator),它把替换 name 的文本变成字符串字面量。上面的例子中,替换 name 的文本是 height.又因为仅仅由空格或者换行隔开的字符串字面量会被连接成一个字符串字面量,所以
printf("height" ": %d\n", height);
等同于
printf("height: %d\n", height);
下面我们来看一个例子
#include <stdio.h> #define my_output(name) printf(#name ": %d\n", name) int main(void) my_output(AGE); return 0; |
输出为
AGE: 24
height: 166