我有下面的代码,我想在5
迭代后取消定义PORT
。但是当我运行这个程序时,输出如下:
PORT
MOB
PORT
MOB...10 times
那么,如果我想在运行时更改它,我该怎么做呢?
我在Visual Studio项目中声明了PORT
→ Properties → C/C++ → Preprocessor。
int main()
{
int i;
for(i = 0; i <= 10; i++)
{
#ifdef PORT
printf("PORT\n");
#endif
if(i == 5)
{
#ifdef PORT
#undef PORT
#endif
#define MOB 1
}
#if MOB
printf("MOB\n");
#endif
}
return 0;
}
4条答案
按热度按时间dfuffjeb1#
预处理器(顾名思义)在编译中的第一步(或者,根据您的观点,在编译完成之前)完成它所做的事情。在运行时发生的事情不能控制以前发生的事情。您不能在运行时更改预处理器所做的任何事情。
要获得所需的效果,您可以从尝试使用预处理器定义改为使用普通变量或普通流控制。
. or:
虽然你没有提到它们,但我要补充的是,C++模板也有同样的限制,所以尝试用它们来做这件事很可能(尽管可能有点不确定)本质上是相似的。模板确实给了你给予更多的能力来检查和修改它们的结果,但只是一点点。最终,模板参数需要是编译时常量,以便模板可以在编译时解析。
qvtsj1bj2#
这不可能。预处理器指令是编译的一部分。没有运行时预处理器这样的东西,你不能在运行时改变指令。二进制文件不知道预处理器指令。
8wtpewkr3#
这不可能
预处理器在编译源文件之前作为源文件的第一个传递之一运行。
你不能在程序运行时操作预处理器.使用普通变量代替。
gzszwxb44#
你不能。预处理器是作为编译之前的一个单独的步骤运行的。没有办法在运行时做到这一点。
你必须使用普通的
if
和else
处理变量。