预处理中的多个定义条件

时间:2016-02-10 09:17:33

标签: c conditional-statements c-preprocessor

我知道我可以制作一些复杂的条件,如:

#if defined(A) || defined(B) || defined(C)

但是,如果我想要一个像这样的条件:

A || (B && C)

我可以使用括号,或者预处理器会忽略它并迫使我写一些嵌套条件吗?

我试过了:

#if defined(A) || (defined(B) && defined(C))

它有效。但只是为了确保它不依赖于平台/编译器或其他任何东西,因为我找不到任何这样的例子。

由于

2 个答案:

答案 0 :(得分:2)

在C99标准中

  

6.10预处理指令

     

如果基团:

     

#if 常量表达式换行组 opt

     

6.6.3

     

常量表达式不应包含赋值,递增,递减,函数调用或逗号运算符,除非它们包含在未评估的子表达式中

defined(A) || (defined(B) && defined(C))当然是一个有效的常量表达式,因此必须有效

答案 1 :(得分:0)

是的,它应该有效,因为预处理器将首先检查括号。