- 论坛徽章:
- 0
|
宏的一个妙用
来源:
蚂蚁的 C/C++ 标准编程
作者:antigloss 等级:一般
发布于2006-02-02 16:20 被读1446次 【字体:
大
中
小
】
假设我们定义了这样一个宏:
#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
#define my_output(name) printf(#name ": %d\n", name)
#define AGE 24
int main(void)
{
int height = 166;
my_output(AGE);
my_output(height);
return 0;
}
输出为
AGE: 24
height: 166
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/11176/showart_395496.html |
|