我有以下使用预处理器条件编译指令的代码:
#define foo
#define bar
#ifdef foo || !bar
extern bool Verbose = FALSE;
#else
extern bool Verbose = TRUE;
#endif
void start() {
}
由于以下错误,它无法编译:
test.mq4(3,12) : 错误 175: '
||
' - 全局范围内不允许表达式
但是,当第一行(foo)被注释掉时,代码编译得很好,这似乎编译器在这种情况下允许这个表达式在全局范围内(当foo未定义时)。
您可以尝试使用mql
编译器编译上述代码(在 Linux 下使用wine
):
mql.exe /mql4 test.mq4
所以问题是:
为什么这不起作用
以及
如何foo || !bar
以适当的方式定义上述预处理器条件( ) ?
我还尝试了以下语法:
#if defined (foo) || defined (!bar)
正如user2357112(GNU cpp 语法)之前所建议的那样,但它失败并出现以下错误:
错误 109:“
#if
”- 无效的预处理器命令错误 149:“
#else
”- 意外令牌
这是因为 MQL 语法完全不同,它不支持这些类型的预处理器命令。