考虑宏扩展后重新扫描'defined'操作符:它应该工作吗?
#define FOOBAR (defined(FOO) || defined(BAR))
#if FOOBAR
/* Do stuff. */
#endif
如若这项工作?我在问,因为显然我的编译器没有问题,但doxygen内部预处理器认为#if
存在语法错误。我知道我可以解决这个问题
#if defined(FOO) || defined(BAR)
#define FOOBAR 1
#endif
#if FOOBAR
/* Do stuff. */
#endif
+1,...或者委员会认为编译器实现者承担了GCC预处理器手册中特定错误条件 – 2012-08-10 19:50:26
的负担太多:'如果定义的操作符由于宏扩展而出现, C标准说行为是不确定的。 GNU cpp将它视为一个真正定义的运算符,并对其进行正常评估。如果您使用命令行选项“-pedantic”,它会警告您的代码在哪里使用此功能,因为其他编译器可能会以不同方式处理它。 – Johanness 2012-12-30 11:30:45