C/C++宏定义中#与##区别

转载 2015年07月08日 10:00:52

【转载自】:http://blog.csdn.net/huang_xw/article/details/7648179

    // #表示:对应变量字符串化  
    // ##表示:把宏参数名与宏定义代码序列中的标识符连接在一起,形成一个新的标识符  
    #include <stdio.h>  
    #define trace(x, format) printf(#x " = %" #format "\n", x)  
    #define trace2(i) trace(x##i, d)  

    int main()  
    {  
        int i=1;  
        char *s="three";  
        float x=2.0;  

        trace(i, d);                // 相当于 printf("x = %d\n", x)  
        trace(x, f);                // 相当于 printf("x = %d\n", x)  
        trace(s, s);                // 相当于 printf("x = %d\n", x)  

        int x1=1, x2=2, x3=3;  
        trace2(1);              // 相当于 trace(x1, d)  
        trace2(2);              // 相当于 trace(x2, d)  
        trace2(3);              // 相当于 trace(x3, d)  

        return 0;  
    }  

相关文章推荐

C/C++: const常量与define宏定义的区别

Link: http://blog.csdn.net/love_gaohz/article/details/7567856 (1) 编译器处理方式不同   define宏是在...

[C++基础]宏定义、内联函数、普通函数的区别

转载自:http://blog.csdn.net/gao675597253/article/details/7397373 用内联取代宏: 1.内联函数在运行时可调试,而宏定义...

C++ 宏定义和 typedef 的区别

宏定义#define为预处理指令,在编译处理时进行简单的文本替换,不作正确性检查,不关含义是否正确照样带入,只在编译已被展开的源程序时才会发现可能的错误并报错。   typedef为复杂的声明定义...

C/C++编译预处理:宏定义指令、文件包含指令、条件编译指令和特殊符号处理

从源代码生成可执行文件的各个阶段为: C源程序(.c)->编译预处理(.i)->编译(.s)->优化程序->汇编程序(.o)->链接程序->可执行文件(.exe)   其中 编译预处理阶段,预处理...

C/C++是怎么通过宏定义来判断操作系统的

详见Qt的qglobal.h 我们写C/C++代码时也可以参考这个来确定所在平台 /* The operating system, must be one of: (Q_OS_x) ...

C/C++常用宏定义,注意事项,宏中#和##的用法

总结下宏和函数的不同之处,以供大家写代码时使用,这段总结摘自《C和指针》一书。 当然宏定义非常重要的,它可以帮助我们防止出错,提高代码的可移植性和可读性等。 下面列举一些成熟软...

C/C++:宏定义中的#与##

C/C++:宏定义中的#与##

C/C++宏定义的可变参数

转自 http://www.vimer.cn/2010/03/cc%E5%AE%8F%E5%AE%9A%E4%B9%89%E7%9A%84%E5%8F%AF%E5%8F%98%E5%8F%82%E6%...
  • kingsyj
  • kingsyj
  • 2011年11月20日 19:37
  • 442

C++/C宏定义中## 连接符与# 符的含义

转载 ## 连接符号由两个井号组成,其功能是在带参数的宏定义中将两个子串(token)联接起来,从而形成一个新的子串。但它不可以是第一个或者最后一个子串。所谓的子串(token)就是指编译器...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C/C++宏定义中#与##区别
举报原因:
原因补充:

(最多只允许输入30个字)