C语言中的宏展开
C语言 展开
2023-09-11 14:14:22 时间
#include<stdio.h> #define f(a,b) a##b #define g(a) #a #define h(a) g(a) int main() { printf("%s\n",h(f(1,2))); 宏h(a) 是g(a),没有#,所以需要进行宏展开 printf("%s\n",g(f(1,2))); //宏g(a) 有#,所以不展开 return 0; }
如何展开宏函数的规则:在展开当前宏函数时,如果形参有#或##则不进行宏参数的展开,否则先展开宏参数,再展开当前宏。
万能的stackoverflow
http://stackoverflow.com/questions/1686324/how-does-this-c-code-work
http://stackoverflow.com/questions/4364971/and-in-macros
http://zjf30366.blog.163.com/blog/static/411164582009061075923/
分析:
x##y把两个符号连起来 xy
#a指把a当成符号,就是把#后面的看成字符串
#define f(a,b) a##b #define g(a) #a #define h(a) g(a)
printf("%s\n",h(f(1,2))); //结果12
//因为h宏中的参数是另外一个宏,且带##,所以作为参数的宏不展开
printf("%s\n",g(f(1,2))); //结果f(1,2)
//因为g宏中的参数是另外一个宏,但不带##,所以作为参数的宏先展开
在展开当前宏函数时,如果形参有#或##则不进行宏参数的展开,否则先展开宏参数,再展开当前宏。
相关文章
- C语言---指针
- 【Linux】嵌入式开发,在Linux中使用C语言对标准I/O库文件的替换Copy
- 【鲲鹏来了】手把手教你在鲲鹏上使用编程语言——C语言
- 【C语言入门教程】4.8 指针数组
- C语言错误之--初始值(低级错误)
- OC语言构造方法
- 数据结构模版----单链表SimpleLinkList[不带头结点&&伪OO](C语言实现)
- ZZNUOJ_C语言1024:计算字母序号(完整代码)
- Computer:C语言/C++语言的简介、发展历史、应用领域、编程语言环境IDE安装、学习路线之详细攻略
- 114. 二叉树展开为链表-C语言dfs算法解题
- C语言 第五章 循环结构练习
- C语言之结构体相减的本质(七十四)
- C语言之打印全部ASCII码(五十三)