2016-02-10 73 views
1

多重定義的條件,我知道我能做出這樣一些複雜的情況:在預處理

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

但是,如果我要像一個條件:

A || (B && C) 

我可以使用括號或預處理器會忽略它並迫使我寫一些嵌套的條件?

我曾嘗試:

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

和它的作品。但只是爲了確保它不依賴於平臺/編譯器或其他任何東西,因爲我找不到任何這樣的例子。

謝謝

+1

我假設你的意思是'#if defined(A)|| (定義(B)&&定義(C))? – Lundin

回答

2

在C99標準

6.10預處理指令

如果基團:

的#if恆定表達新行組選擇

6。 6.3

常量表達式不得含有分配,遞增,遞減,函數調用,或逗號運算符,當它們包含在不評估

defined(A) || (defined(B) && defined(C))當然是有效的常量表達式子表達式中除,所以它必須工作

0

是的,它應該工作,因爲預處理器將首先檢查括號。