-2

我想知道是否可以定义在条件中使用代码中某个点的哪些更改值。基本上是这样的:

//////////////////////////////////////////// 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();

最好的方法是什么?我宁愿不走那条路,因为调用键事件的类是控制主循环和窗口的类的成员,所以我必须在较小的类中设置指向包含类的指针才能调用 getWindow( ) 而且它似乎是一种更复杂的方法。但是如果我不能用预处理器指令来做到这一点,我只需要使用指向父类的指针。

4

2 回答 2

0

您误解了预处理器符号的使用。将预处理器代码视为与您的 c/c++ 代码纠缠在一起的单独代码。在编译时执行预处理器代码,并且该执行产生源代码,然后编译器将其转换为二进制文件。您不能在运行时使用预处理器符号,因为它们不存在(它们已被编译掉)。看来您可能希望在您正在做的事情中使用全局范围的变量。

于 2013-11-08T16:15:51.293 回答
0

预处理器条件是唯一在编译的第一个预处理阶段期间的条件。

一旦该阶段的编译完成,宏(#define 值)就会被有效地替换实例。

当你写

if (SHUTDOWN)

那么编译器看到的是在预处理完成和编译正确开始时“SHUTDOWN”的值。所以

#define SHUTDOWN true
if (SHUTDOWN)

编译为

if (true)

然而

#define SHUTDOWN

if (SHUTDOWN)

编译失败,如

if ()

如果您要 #define SHUTDOWN 解析为变量,那么是的,这绝对是可能的,因为变量可以在运行时更改。但常数没有。

于 2013-11-08T16:23:05.240 回答