首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

C++ 中的条件 宏定义 #ifdef,如何用不起来

2012-09-08 
C++ 中的条件 宏定义 #ifdef,怎么用不起来?我的问题是想实现这样的功能:#ifdef XXXTodo...#endif但是这个

C++ 中的条件 宏定义 #ifdef,怎么用不起来?
我的问题是想实现这样的功能:

#ifdef XXX
  Todo...
#endif  


但是这个 XXX 在什么地方定义呢?
  0、如果我直接定义的话,那么 Todo 程序段肯定会被执行。
  1、我用了 
  #if (condition)
  #define XXX
  #endif
  怎么不起作用呢?就算我的 condition 成立,发现在程序中也不会执行“#define XXX”。
  请问,具体怎么实现这个功能?

[解决办法]
#开头的命令是预编译命令,它的所有功能都在编译程序前完成
#if这个预编译命令,它的判断条件必须能够在编译程序前经由简单的文本处理和数学运算就得到结果,当然里面不能有任何程序编译后运行时才赋值的变量等

要在程序运行中做判断,请使用if语句
[解决办法]
windows还是linux平台?
vc的话,可以在预编译器选项里,linux可以在makefile里,-G
[解决办法]
回楼主:
对于楼主这种写法!我见过他的使用!这种使用一般是这个头文件根据不同的条件对应不同的内容。例如你那个XXX可以是平台里自带的宏定义那么这种写法就可以实现对应不同平台的头文件包含方法。
对于楼主说XXX在哪里定义,这个真的不好回答!只有楼主提供了你的需求才好回答!
[解决办法]
#开头的指令都是预处理指令,和 C 语句是不一样的。
C 的编译阶段分 预处理->编译->链接。
预处理主要用处就是在源代码里做文字替换和筛选工作,为编译做准备。
#if...#endif 就是告诉预处理器如果 #if 后面的条件成立,那么就把 #if 和 #endif 这两行(不包括这两行里面的内容)删了交给编译器;如果不成立,那么把 #if...#endif 之间的所有内容删了交给编译器。
编译器看不到任何 #打头的命令,因为预处理器都给处理掉了,而且编译器即使看到了也只会报错,因为它不认识这些指令。

[解决办法]

探讨
我的问题是,根据某些条件去决定是否要 定义xxx2(#define xxx2)。而这些条件又不想2楼说的那样简单(“能够在编译程序前经由简单的文本处理和数学运算就得到结果”)。

[解决办法]
楼主清楚
#if是在编译期
if是在运行时
吗?
[解决办法]
int main()
{
 int a = 1;
int b = 10;
int step = 1;
int param = 0;
int d = 100;
bool flag = false;
 if(flag)
MAC1(a,b,step,param,d)

cout<<d<<endl; /*当flag == false 时,这句话,怎么没有被执行*/

 if(flag); //这里居然要 加";"才能编译过去。。
MAC2
 

return 1;
}

这段代码在编译前进行宏替换,成为以下这段代码

int main()
{
 int a = 1;
int b = 10;
int step = 1;
int param = 0;
int d = 100;
bool flag = false;
 if(flag)
for(param = a; param < b; param+=step) 

d = param;

cout<<d<<endl; /*当flag == false 时,这句话,怎么没有被执行*/

 if(flag); //这里居然要 加";"才能编译过去。。
}
 

return 1;
}

现在看明白了没?

热点排行