社区
C++ 语言
帖子详情
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
打赏
收藏
C++ 中的条件 宏定义 #ifdef,怎么用不起来?
我的问题是想实现这样的功能: #ifdef XXX Todo... #endif 但是这个 XXX 在什么地方定义呢? 0、如果我直接定义的话,那么 Todo 程序段肯定会被执行。 1、我用了 #if (condition) #define XXX #endif 怎么不起作用呢?就算我的 condition 成立,发现在程序中也不会执行“#define XXX”。 请问,具体怎么实现这个功能?
复制链接
扫一扫
分享
转发到动态
举报
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)
#if
def
,#else,#endif和#ifn
def
的用法
#if
def
、#else、#endif 和#ifn
def
是 C/
C++
预处理命令
中
条件
编译的四个基本指令,它们可以帮助开发者在编译前对代码进行选择性编译,从而实现代码的灵活使用和高效编译。 #if
def
指令的用法 #if
def
指令用来检测...
#if
def
,#else,#endif,#if用法详解
这里,我们使用#ifn
def
来判断是否已经包含了头文件,如果没有包含,那么定义宏_STDIO_H_,否则跳过。 注意 在头文件
中
,我们通常不要定义变量,而是使用extern关键字来声明变量,然后在源文件
中
定义变量。 例如:...
c
c++
条件
编译及其他
条件
编译指令如`#if`, `#if
def
`, `#ifn
def
`, `#elif`, `#else`, 和 `#endif`则提供了根据
宏定义
或其他
条件
决定是否编译某段代码的能力。例如,`#if`后面跟随一个布尔表达式,如果表达式为真,则编译其后的代码;`#...
C++
预编译指令用法
C++
预编译指令是编程过程
中
非常重要的工具,它们允许程序员根据特定的
条件
来控制代码的编译过程。本文将详细介绍四个主要的预编译指令:`#un
def
`、`#if
def
`、`#ifn
def
` 和 `#if`,以及它们在实际编程
中
的应用。 ...
介绍c语言
中
条件
编译相关的预编译指令
但多数
C++
程序不推荐使用函数宏,调试上有一定难度,可考虑使用
C++
的 inline 代替之。 例如: ```c #
def
ine MIN(a,b) ((a)>(b)? (a):(b)) #
def
ine SAFE_DELETE(p) {if(NULL!=p){delete p; p = NULL;}} ``` 2. ...
C++ 语言
65,202
社区成员
250,521
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章