C++ 中的条件 宏定义 #ifdef,怎么用不起来?

wang603603 2012-08-20 10:08:00
我的问题是想实现这样的功能:

#ifdef XXX
Todo...
#endif


但是这个 XXX 在什么地方定义呢?
0、如果我直接定义的话,那么 Todo 程序段肯定会被执行。
1、我用了
#if (condition)
#define XXX
#endif
怎么不起作用呢?就算我的 condition 成立,发现在程序中也不会执行“#define XXX”。
请问,具体怎么实现这个功能?
...全文
1427 30 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
youkuxiaobin 2012-08-23
  • 打赏
  • 举报
回复
看开源代码
wang603603 2012-08-20
  • 打赏
  • 举报
回复
//好吧,主要程序是这样的:
#define MAC_Equal(dest, sour) dest=sour
#define MAC1(a,b,step,param,d) for(param = a; param < b; param+=step) \
{ \
MAC_Equal(d, param);
#define MAC2 }

#include <iostream>
using namespace std;
int main()
{
int a = 1;
int b = 10;
int step = 1;
int param = 0;
int d = 100;

//#ifdef XXX
MAC1(a,b,step,param,d)
//#endif
cout<<d<<endl;

//#ifdef XXX
MAC2
//#endif

return 1;
}

//就是想知道在哪可以控制我的 XXX定义, 来控制我的程序是执行循环,还不执行循环。
//手敲的代码,可能会有误!!
wingzero520 2012-08-20
  • 打赏
  • 举报
回复
#开头的指令都是预处理指令,和 C 语句是不一样的。
C 的编译阶段分 预处理->编译->链接。
预处理主要用处就是在源代码里做文字替换和筛选工作,为编译做准备。
#if...#endif 就是告诉预处理器如果 #if 后面的条件成立,那么就把 #if 和 #endif 这两行(不包括这两行里面的内容)删了交给编译器;如果不成立,那么把 #if...#endif 之间的所有内容删了交给编译器。
编译器看不到任何 #打头的命令,因为预处理器都给处理掉了,而且编译器即使看到了也只会报错,因为它不认识这些指令。
maoloverme1 2012-08-20
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 的回复:]
#define xxx2
#ifdef xxx2
//*********
Todo1...
#else
//*************
Todo2...
#endif

你这样写的话,是不是 Todo1 肯定被执行了,而Todo2 肯定不会被执行。 如果我要是想执行 Todo2的话,
岂不是还要到代码中删除 #define xxx2;
我的问题是,根据某些条件去决定……
[/Quote]
请问楼主的条件想写成什么样子的?需要很复杂吗?是一个什么样的功能需要很复杂的预编译选项?
xiezhunben 2012-08-20
  • 打赏
  • 举报
回复
回楼主:
对于楼主这种写法!我见过他的使用!这种使用一般是这个头文件根据不同的条件对应不同的内容。例如你那个XXX可以是平台里自带的宏定义那么这种写法就可以实现对应不同平台的头文件包含方法。
对于楼主说XXX在哪里定义,这个真的不好回答!只有楼主提供了你的需求才好回答!
wang603603 2012-08-20
  • 打赏
  • 举报
回复

#define xxx2
#ifdef xxx2
//*********
Todo1...
#else
//*************
Todo2...
#endif

你这样写的话,是不是 Todo1 肯定被执行了,而Todo2 肯定不会被执行。 如果我要是想执行 Todo2的话,
岂不是还要到代码中删除 #define xxx2;
我的问题是,根据某些条件去决定是否要 定义xxx2(#define xxx2)。而这些条件又不想2楼说的那样简单(“能够在编译程序前经由简单的文本处理和数学运算就得到结果”)。

[Quote=引用 12 楼 的回复:]
#ifndef xxx
#define xxx
//................
#endif
头文件必须要有的
#define xxx2
#ifdef xxx2
//*********
#else
//*************
#endif
条件编译,暂时删除一段代码,跨平台,debug,等等。
[/Quote]
wanglu343280746 2012-08-20
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]
是VS(vc),但是我要是不用的话,还要到编译器里面把 它删了吧! 多麻烦?!

引用 3 楼 的回复:
windows还是linux平台?
vc的话,可以在预编译器选项里,linux可以在makefile里,-G
[/Quote]
vc的话,好像这个#if 条件 #endif不起作用
Linux下才行
冰与火 2012-08-20
  • 打赏
  • 举报
回复
#ifndef xxx
#define xxx
//................
#endif
头文件必须要有的
#define xxx2
#ifdef xxx2
//*********
#else
//*************
#endif
条件编译,暂时删除一段代码,跨平台,debug,等等。
Corner 2012-08-20
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]
#if (condition)
#define XXX
#endif 我是放在前面啊,但是我的condition条件, 没有用啊。 不管我的 condition 是否成立,里面的#define XXX 始终没有被执行啊?也就是说,
#ifdef XXX
Todo...
#endif 中的Todo 也没有被执行。


引用 5 楼 的回复:
#ifdef XXX
To……
[/Quote]
#if (condition)换成#if defined(XXX),XXX在这条宏定义前定义(#define XXX)
wang603603 2012-08-20
  • 打赏
  • 举报
回复
//#if (condition)
if (condition)
{
#define XXX
}
// #endif
在程序中用 if 的话,也是不管我的if中条件是否成立,我的XXX 始终都被定义了啊。。!
[Quote=引用 2 楼 的回复:]
#开头的命令是预编译命令,它的所有功能都在编译程序前完成
#if这个预编译命令,它的判断条件必须能够在编译程序前经由简单的文本处理和数学运算就得到结果,当然里面不能有任何程序编译后运行时才赋值的变量等

要在程序运行中做判断,请使用if语句
[/Quote]
wang603603 2012-08-20
  • 打赏
  • 举报
回复
是VS(vc),但是我要是不用的话,还要到编译器里面把 它删了吧! 多麻烦?!
[Quote=引用 3 楼 的回复:]
windows还是linux平台?
vc的话,可以在预编译器选项里,linux可以在makefile里,-G
[/Quote]
wang603603 2012-08-20
  • 打赏
  • 举报
回复
#if (condition)
#define XXX
#endif 我是放在前面啊,但是我的condition条件, 没有用啊。 不管我的 condition 是否成立,里面的#define XXX 始终没有被执行啊?也就是说,
#ifdef XXX
Todo...
#endif 中的Todo 也没有被执行。

[Quote=引用 5 楼 的回复:]
#ifdef XXX
Todo...
#endif

但是这个 XXX 在什么地方定义呢?

放在上面的代码之前啊

就两种情况:要么执行,要么不执行,对应定义XXX和不定义XXX
[/Quote]
头发吹乱了 2012-08-20
  • 打赏
  • 举报
回复
本来就是要么用,要么不用,你到底是要闹那样哟
Corner 2012-08-20
  • 打赏
  • 举报
回复
#if defined XXX,XXX位置通#ifdef
dhdahai 2012-08-20
  • 打赏
  • 举报
回复
#ifdef XXX
Todo...
#endif

但是这个 XXX 在什么地方定义呢?

放在上面的代码之前啊

就两种情况:要么执行,要么不执行,对应定义XXX和不定义XXX
Corner 2012-08-20
  • 打赏
  • 举报
回复
XXX定义在#ifdef宏前面——本文件#ifdef位置之前或者#ifdef宏之前的头文件中
ouyh12345 2012-08-20
  • 打赏
  • 举报
回复
windows还是linux平台?
vc的话,可以在预编译器选项里,linux可以在makefile里,-G
baichi4141 2012-08-20
  • 打赏
  • 举报
回复
#开头的命令是预编译命令,它的所有功能都在编译程序前完成
#if这个预编译命令,它的判断条件必须能够在编译程序前经由简单的文本处理和数学运算就得到结果,当然里面不能有任何程序编译后运行时才赋值的变量等

要在程序运行中做判断,请使用if语句
wang603603 2012-08-20
  • 打赏
  • 举报
回复
正在coding, 大神速度。。!
dll520wf 2012-08-20
  • 打赏
  • 举报
回复
人气啊~~~顶之
加载更多回复(10)

65,202

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧