预处理器条件
Preprocessor Conditionals
我想知道是否可以在条件中使用在代码中某个点更改值的定义。基本上是这样的:
//////////////////////////////////////////// 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(),这似乎是一个更复杂的方法。但是,如果我不能使用预处理器指令来做到这一点,我只需要使用指向父类的指针。
您误解了预处理器符号的使用。 将预处理器代码视为与 C/C++ 代码纠缠在一起的单独代码。 在编译时,执行预处理器代码,该执行会产生源代码,然后编译器将其转换为二进制。 不能在运行时使用预处理器符号,因为它们不存在(它们被编译掉了)。 看来您可能希望在正在执行的操作中使用全局范围的变量。
预处理器条件只是编译的第一个预处理阶段之前的条件。
一旦编译阶段完成,宏(#define 值)就会被有效地替换
。当你写的时候
if (SHUTDOWN)
那么编译器看到的是预处理完成和编译正确开始时的"SHUTDOWN"值。所以
#define SHUTDOWN true
if (SHUTDOWN)
编译为
if (true)
而
#define SHUTDOWN
if (SHUTDOWN)
编译失败,如
if ()
如果要 #define SHUTDOWN 解析为变量,那么是的,这是绝对可能的,因为变量可以在运行时更改。但常量不会。
相关文章:
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- #定义c-预处理器常量..我做错了什么
- 预处理器:插入结构名称中的前一个行号
- 如何摆脱为条件编译定义预处理器宏的需要?
- 有没有办法在 c++ 中拥有条件预处理器
- 修复"-Wunused-parameter"取决于预处理器条件的警告
- 带有预处理器的可视化C++条件链接
- 如何使预处理器 #if 以另一个不同文件中的值为条件
- 预处理器和模板参数或代码段的条件编译
- VS2010 未正确处理预处理器条件下的"includes"
- 预处理器/条件变量定义
- 预处理器条件
- 将使用"if"的条件放在预处理器C++
- 条件预处理器相对于条件语句的优势
- c++预处理器条件参数
- 根据预处理器条件生成宏
- 处理器多久检查一次while循环条件
- while条件不工作时中的预处理器指令
- 重复代码块的预处理器指令(带条件)
- c++预处理器添加word if条件