C语言宏 ---- 宏展开
2014-04-04 14:06
225 查看
#define B C #define A B #define test(x,y) test1(x,y) #define test1(x,y) x ## y /*!TEST1: !*/ test(A,C) /*!TEST2: !*/ test1(A,C)
(一) 首先用实参替换形参,将实参代入宏文本中, 将实参代入宏文本后,。
(二) 如果遇到字符“#”或“##”,即使实参是宏,也不再展开实参,而是当作文本处理;否则如果实参也是宏,则展开实参;
(三) 最后再继续处理宏替换后的宏文本,若宏文本也包含宏则继续展开,否则完成展开。
/*! TEST1 !*/
(1)首先使用实参替换形参,将实参带入宏文本
test(A,C) (1)==> test1(A,C)
(2)如果实参也是宏,则展开实参.
test1(A,C) (2)==> test1(B,C)
test1(B,C) (2)==> test1(C,C)
(3)继续处理宏替换后的宏文本,若宏文本也包含宏则继续展开,否则展开完成
test1(C,C) (3)(1)==> C ## C
C ## C (3)(2)==> C ## C
C ## C (3)(3)==> CC
/*! TEST2 !*/
(1)首先使用实参替换形参
test1(A,C) (1)==> A ## C
(2)如果遇到#或者##,即使实参是宏也不展开,当作文本处理.
A ## C (1)==> A ## C
(3)继续处理宏替换后的文本宏,若宏文本也包含宏则继续展开,否则展开完成
A ## C (3)(1)==> AC
相关文章推荐
- 用cl和sublime搭建简易c++开发环境
- NYOJ-106-背包问题
- c语言库函数:memcpy
- C语言中volatile关键字的作用[转]
- 初探利用C++的STL实现数学四则运算计算结果
- open cv+C++错误及经验总结(十二)
- C++中的struct和class的区别
- vc++常见数据类型所占字节空间总结(VS2008 64位系统)
- C++命名空间
- 排序小结(C++版)
- c++ 文件流
- 我的c语言经历
- 第五周C++作业
- C++类中定义数据成员的类型的几种方式
- CPP(一)在希望中出发:类成员函数指针
- C++的一大误区——深入解释直接初始化与复制初始化的区别
- 设计模式入门1——简单工厂模式(AudiFactory)
- c++学习笔记 第二章 c++ 简单程序设计
- c++应用软件工程师笔试题
- 设计模式基础1——多态练习