每次看到类似如下的代码,总是不解,为什么要分两级定义呢,分明可以直接将__stringify定义为 #x嘛。但大家都这么做,理论上是不会有问题的啊。今天忍不住搜了下,看来还是我没往深入地想啊,唉,鄙视自己!

#define __stringify_1(x...) #x
 #define __stringify(x...) __stringify_1(x)

假设:直接 #define __stringify(x) #x

且 #define AA bb

那么 __stringify(AA) 展开为 "AA"

而像最上面的定义方法,__stringify(AA) 将展开为 "bb"

不过,最后我还想问一句,gcc支持嵌套多少层宏定义,无限?

参考:http://hi.baidu.com/%B1%B1%B7%E7%B1%B1%B5%C4%D6%ED/blog/item/a2d8e031942aa20591ef39ae.html

转载于:https://www.cnblogs.com/windtail/archive/2011/04/13/2623217.html

gcc 的宏替换 __stringify相关推荐

  1. C语言格式化输出以及%宏替换

    在初学C语言的时候,我们会接触到很多格式化输出.如%c,%t,%s,%d等等. 当然这些都是比较基本的用法.现在讲下相对比较晦涩的%后面跟宏替换.这个并不是常用的格式化输出用法,但也可以理解为就是格式 ...

  2. C++ 笔记(32)— 预处理、文件包含include、宏替换define、条件包含ifndef、define

    C/C++预处理器在源代码编译之前对其进行一些文本性质的操作. 它的主要任务包括删除注释 . 插入 #include 指令包含的文件的内容 . 定义和替换由 #defme 指令定义的符号以及确定代码的 ...

  3. python宏替换_#和##在宏替换中的作用

    #include #define f(a,b) a##b #define g(a)  #a #define h(a) g(a) int main() { printf("%s/n" ...

  4. C语言宏定义、宏替换

    1.宏替换的格式 #define 名字 替换文本 后续所有出现名字的地方都将被替换为替换文本. 替换文本可以是任意的,例如 #define forever for(;;) //无限循环 该语句为无限循 ...

  5. c语言中宏替换时的顺序

    http://hi.baidu.com/feichideche/item/f138221d97ada1fc746a84e2 宏替换顺序,这是以前在论坛里看到的一个问题,因此整理下来,供自己学习和参考: ...

  6. Java中的宏变量,宏替换详解。

    转载自 Java中的宏变量,宏替换详解. 群友在微信群讨论的一个话题,有点意思,特拿出来分享一下. 输出true false 来看下面这段程序,和群友分享的大致一样. public static vo ...

  7. python宏替换_简单的宏替换

    简单的宏替换 1.宏定义必须写在第一次使用该宏定义的代码之前: 2.宏定义不是以分号结束的 3.#define string1 string2 之间至少要有一个空格 4.string 1称为宏,str ...

  8. #和##在宏替换中的作用

    #include <stdio.h> #define f(a,b) a##b #define g(a)  #a #define h(a) g(a) int main() {   print ...

  9. c语言宏定义替换字符串,C语言中,宏替换的替换规则

    匿名用户 1级 2011-10-25 回答 简单来说:宏定义又称为宏代换.宏替换,简称"宏".是C提供的三种预处理功能的其中一种. 复杂的请看下面,讲的很全.下面的带参宏定义,多行 ...

  10. 宏替换、条件编译、头文件展开

    宏替换.文件编译和头文件的展开 程序执行的几个步骤: 1.预处理: ①将头文件展开②宏替换③条件编译④去掉注释 2.编译: ①语义语法纠错②将.c文件编译成汇编语言 3.汇编:将汇编语言变成二进制机器 ...

最新文章

  1. C#基础练习(时间的三连击)
  2. 机器学习知识点(三十五)蒙特卡罗方法
  3. 深入并发包-ConcurrentHashMap
  4. 借助Web技术,桌面用户界面将保持活跃
  5. 【HDU - 1863】 畅通工程(并查集+最小生成树)
  6. python CV2裁剪图片并保存
  7. 点云配准_各类ICP介及特征配准流程介绍
  8. 生信技能树课程记录笔记(五)20220528
  9. 图的最短路径之Dijkstra算法
  10. JAVA日期转换函数(包括:日期、周数的计算)
  11. vue——动态吸顶组件
  12. 香槟分校计算机专业毕业生去向,2019年伊利诺伊州立大学香槟分校计算机专业排名_托普仕留学...
  13. 148 朴光佑 蓽齋
  14. html代码seo,SEO必学基础html代码基础
  15. 让开发又爱又恨的缓存
  16. 【Excel】用excel生成矩阵
  17. 《Stacked Attention Networks for Image Question Answering》论文解读与实验
  18. matlab 向量变标量,MATLAB变量——标量,向量,矩阵
  19. Googel广告推广后台如何操作?Googel广告怎么投放?
  20. J2EE是什么,主要包括哪些技术【转】

热门文章

  1. android activity使用,Android Activity使用拾遗
  2. mybatis逆向工程maven版本idea工具
  3. 数据库TCPIP协议开了,但还是远程连不上
  4. VsVim - Shortcut Key (快捷键)
  5. 利用 Commons-Fileupload 实现文件上传分析(转)
  6. c#实现打印功能,可以设置纸张大小,字体和颜色等
  7. 为什么调用支付宝接口后返回是错误页面!
  8. Java构造器(构造方法)与方法区别
  9. 宠物商城后台管理系统(springMVC+Mybatis+数据库)
  10. BZOJ4066 简单题(KD-Tree)