作者:王静芸平桂 | 来源:互联网 | 2023-09-06 12:02
我的问题是想实现这样的功能:
#ifdef XXX
Todo...
#endif
但是这个 XXX 在什么地方定义呢?
0、如果我直接定义的话,那么 Todo 程序段肯定会被执行。
1、我用了
#if (condition)
#define XXX
#endif
怎么不起作用呢?就算我的 condition 成立,发现在程序中也不会执行“#define XXX”。
请问,具体怎么实现这个功能?
30 个解决方案
#开头的命令是预编译命令,它的所有功能都在编译程序前完成
#if这个预编译命令,它的判断条件必须能够在编译程序前经由简单的文本处理和数学运算就得到结果,当然里面不能有任何程序编译后运行时才赋值的变量等
要在程序运行中做判断,请使用if语句
windows还是linux平台?
vc的话,可以在预编译器选项里,linux可以在makefile里,-G
XXX定义在#ifdef宏前面——本文件#ifdef位置之前或者#ifdef宏之前的头文件中
#ifdef XXX
Todo...
#endif
但是这个 XXX 在什么地方定义呢?
放在上面的代码之前啊
就两种情况:要么执行,要么不执行,对应定义XXX和不定义XXX
#if defined XXX,XXX位置通#ifdef
#ifndef xxx
#define xxx
//................
#endif
头文件必须要有的
#define xxx2
#ifdef xxx2
//*********
#else
//*************
#endif
条件编译,暂时删除一段代码,跨平台,debug,等等。
回楼主:
对于楼主这种写法!我见过他的使用!这种使用一般是这个头文件根据不同的条件对应不同的内容。例如你那个XXX可以是平台里自带的宏定义那么这种写法就可以实现对应不同平台的头文件包含方法。
对于楼主说XXX在哪里定义,这个真的不好回答!只有楼主提供了你的需求才好回答!
#开头的指令都是预处理指令,和 C 语句是不一样的。
C 的编译阶段分 预处理->编译->链接。
预处理主要用处就是在源代码里做文字替换和筛选工作,为编译做准备。
#if...#endif 就是告诉预处理器如果 #if 后面的条件成立,那么就把 #if 和 #endif 这两行(不包括这两行里面的内容)删了交给编译器;如果不成立,那么把 #if...#endif 之间的所有内容删了交给编译器。
编译器看不到任何 #打头的命令,因为预处理器都给处理掉了,而且编译器即使看到了也只会报错,因为它不认识这些指令。
//好吧,主要程序是这样的:
#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
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<
//#ifdef XXX
MAC2
//#endif
return 1;
}
//就是想知道在哪可以控制我的 XXX定义, 来控制我的程序是执行循环,还不执行循环。
//手敲的代码,可能会有误!!
我这里主要是想要重用代码,之所以用#define MAC_Equal(dest, sour) dest=sour
是因为我这里 有将近70多个变量 ,既要能执行单个值运算,又要能实现 for 循环啊(选取在哪个值时,结果最优)。
而且这些变量哪个要 执行for循环,还要根据用户选择。
我怎么能用 if(...)else(...)来搞搞定
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<
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<
if(flag); //这里居然要 加";"才能编译过去。。
}
return 1;
}
现在看明白了没?