作者:蟹子萝卜控 | 来源:互联网 | 2022-12-10 12:44
我很难在SO上找到许多引用这个主题的答案,但这里有一些看似无辜的代码,当F
它不是一个定义的宏时无法编译,
int main() {
#if defined(F) && F(0, 2, 0)
return 0;
#endif
return 1;
}
根据GCC手册的这一部分,问题是内部#if
表达式"表达式中的所有宏都在表达式值的实际计算开始之前被扩展",所以这在无效检查中,因为当F
未定义时,我看到,
test.cpp:2:20: error: missing binary operator before token "("
#if defined(F) && F(0, 2, 0)
^
我的问题:这是正确做这种检查的唯一方法吗?
int main() {
#if defined(F)
#if F(0, 2, 0)
return 0;
#endif
#endif
return 1;
}
我发现这很丑陋且不直观,所以我希望在预处理器中有更好的方法来做这些事情.