我知道我可以制作一些复杂的条件,如:
#if defined(A) || defined(B) || defined(C)
但是,如果我想要一个像这样的条件:
A || (B && C)
我可以使用括号,或者预处理器会忽略它并迫使我写一些嵌套条件吗?
我试过了:
#if defined(A) || (defined(B) && defined(C))
它有效。但只是为了确保它不依赖于平台/编译器或其他任何东西,因为我找不到任何这样的例子。
由于
答案 0 :(得分:2)
在C99标准中
6.10预处理指令
如果基团:
#if 常量表达式换行组 opt
6.6.3
常量表达式不应包含赋值,递增,递减,函数调用或逗号运算符,除非它们包含在未评估的子表达式中
defined(A) || (defined(B) && defined(C))
当然是一个有效的常量表达式,因此必须有效
答案 1 :(得分:0)
是的,它应该有效,因为预处理器将首先检查括号。