我想知道是否可以在条件中使用代码中某些位置更改值的定义。基本上是这样的:
//////////////////////////////////////////// SomeFile.cpp
#define SHUTDOWN false
while(window->isOpen())
{
if(SHUTDOWN)
window->close();
// Rest of the main loop
}
//////////////////////////////////////////// SomeOtherFile.cpp
if(Escape.isPressed())
{
#undef SHUTDOWN
#define SHUTDOWN true
}
因此导致应用关闭。如果不是,就会有像
这样的功能RenderWindow* getWindow()
{
return window;
}
然后调用
if(Escape.isPressed())
getWindow()->close();
最好的方法吗?我宁愿不去那条路,因为调用key事件的类是控制主循环和窗口的类的成员,所以我必须在较小的类中设置指向包含类的指针来调用getWindow( )它似乎是一个更复杂的方法。但是,如果我不能使用预处理程序指令,我只需要使用指向父类的指针。
答案 0 :(得分:0)
您误解了预处理程序符号的使用。将预处理器代码视为与c / c ++代码纠缠在一起的单独代码。在编译时,执行预处理器代码并执行导致源代码,然后编译器将其转换为二进制代码。您不能在运行时使用预处理程序符号,因为它们不存在(它们已被编译掉)。看来你可能想要在你正在做的事情中使用全局范围的变量。
答案 1 :(得分:0)
预处理器条件只是在编译的第一个预处理阶段之前的条件。
完成编译阶段后,宏(#define值)将被有效替换为instanations。
写作时
if (SHUTDOWN)
然后编译器看到的是预处理完成和编译正确开始时“SHUTDOWN”的值。所以
#define SHUTDOWN true
if (SHUTDOWN)
编译到
if (true)
,而
#define SHUTDOWN
if (SHUTDOWN)
错误地编译,如
if ()
如果您要#define SHUTDOWN解析变量,那么是的,这是绝对可能的,因为变量可以在运行时更改。但常数却没有。