读书人

define到底如何扫描的(define的嵌套)

发布时间: 2013-10-03 17:28:15 作者: rapoo

define到底怎么扫描的(define的嵌套)
#define X 3
#define Y X*2
#undef X
#define X 2
int z=Y
结果是4

可是去掉#define X 2
cout<<Y反尔编译不过去为什么,为什么不是输出X*2(不进行替换的)
还有
#define X 3
#define Y X*2
cout<<Y

#define Y X*2
#define X 3
cout<<Y
为什么结果都是6,到底从哪来扫描到哪里,扫几遍
[解决办法]
这个需要宏调试...宏调试ms没有好的工具.只好手工调试.

我使用的ide是qt creator..

比如.

#define Y X*2
#define X 3

//#include <iostream>

using namespace std;

int main()
{
cout<<Y;
return 0;
}

第一,把//#include <iostream>注释掉,贝儿扩展开代码太长了..
第2.编译这个cpp,ide会出来提示..不个其中的参数改给挂..
g++ -pipe -fno-keep-inline-dllexport -g -frtti -Wall -Wextra -fexceptions -mthreads -DUNICODE -DQT_QML_DEBUG -DQT_DECLARATIVE_DEBUG -I..\macroExtend -I"." -I"..\..\Qt\Qt5.1.1\5.1.1\mingw48_32\mkspecs\win32-g++" -E ..\macroExtend\main.cpp
注意:-E必须大写..
第3.运行这个命令.出来以下宏的运行结果..



using namespace std;

int main()
{
cout<<3*2;
return 0;
}

读书人网 >C++

热点推荐