Chinaunix首页 | 论坛 | 博客
  • 博客访问: 198278
  • 博文数量: 264
  • 博客积分: 6010
  • 博客等级: 准将
  • 技术积分: 2740
  • 用 户 组: 普通用户
  • 注册时间: 2009-06-03 13:25
文章分类

全部博文(264)

文章存档

2011年(1)

2009年(263)

我的朋友

分类: C/C++

2009-06-09 15:20:52

假设我们定义了这样一个宏:
    #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

阅读(173) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~