C++:宏替换的误区
来源:互联网 发布:淘宝兼职招聘 编辑:程序博客网 时间:2024/06/05 07:01
看下面的代码,输出的结果是什么呢?
#include <iostream>using namespace std;#define NUM 0void fun(){ #undef NUM #define NUM 100}int main(){ fun(); cout<<"NUM="<<NUM<<endl;//NUM=100; return 0;}
没错,答案是100,再看下面这段代码:
#include <iostream>using namespace std;#define NUM 0void fun();int main(){ fun(); cout<<"NUM="<<NUM<<endl;//NUM=0; return 0;}void fun(){ #undef NUM #define NUM 100}
输出的结果是0,为什么呢?此刻我得出的初步结论是,宏替换并不是扫描全文件然后全部替换,为了解决我的疑问,我把宏处理之后两个函数代码图截取下来了。
很明显替换结果并不一样。
#include <iostream>using namespace std;void fun();int main(){ fun(); OUT; //main.cpp:7: error: ‘OUT’ was not declared in this scope //明显出错了,因为到main函数的时候看不到OUT。 return 0;}void fun(){#define OUT cout<<"hello word"<<endl}//由此可以得出,宏替换并不是在预处理的时候替换所有的宏,//只会替换在main函数之前可见的,如果定义在main函数后面的//宏定义是不会展开的,所以在main里面是看不到宏改变或者宏定义的。
1 0
- C++:宏替换的误区
- C/C++ 的误区
- c语言学习的误区
- C++Vector的使用误区
- C++Vector的使用误区
- c++Vector的使用误区
- C++Vector的使用误区
- 关于C里面宏替换的问题
- 关于C里面宏替换的问题
- c语言 宏替换的顺序
- 关于C里面宏替换的问题
- 我的C语言编程误区
- 初涉C/C++易走进的误区
- OBject-c工厂方法的误区
- C++stringstream的clear()清空误区
- c语言碰到的一些误区
- C++stringstream的clear()清空误区
- C/C++数组初始化的一些误区
- zzuli OJ 1011: 圆柱体表面积
- Java的缓存机制
- Android 网络请求超时处理方案
- HBase shell 无法使用 Backspace 键-解决方案
- Hibernate关联之 一对一连接表双向关联
- C++:宏替换的误区
- dump_stack的简单使用
- Objective-C代码规范(1)
- svn
- eclipse中出现的错误
- Java笔记学习总结(四)
- cocos2d-x之函数更新
- iOS5系统API和5个开源库的JSON解析速度测试
- 性别和教育:先天加上后天【经济学人】