27

我知道如何使用預處理指令類似這樣的Objective-C的預處理指令:爲「如果不是」

#if SOME_VARIABLE 
    // Do something 
#else 
    // Do something else 
#endif 

但如果我只是想要做的事IF NOT SOME_VARIABLE。

很顯然,我還可以這樣做:

#if SOME_VARIABLE 

#else 
    // Do something else 
#endif 

。 。 。離開,如果空的,但是,有沒有辦法做到:

#if not SOME_VARIABLE 
    // Do something 
#endif 

蘋果文檔here建議沒有,但是這似乎是一個非常基本的需要。

基本上我想要做的預處理器相當於:

if(!SOME_VARIABLE)(
{ 
    // Do Something 
} 

回答

61

你可以嘗試:

#if !(SOME_VARIABLE) 
    // Do something 
#endif 
+0

我已經刪除了對TARGET_IPHONE_SIMULATOR的所有引用。那只是一個例子。我只想知道如何在預處理指令中說IF NOT。 – Undistraction

+0

啊好吧,那很好。解決方案也應該有效。 – CarlJ

+2

所以它確實如此。謝謝。 – Undistraction

15

你們是不是要檢查,如果事情被定義或沒有? 如果是的話,你可以嘗試:

#ifndef SOME_VARIABLE

#if !defined(SOME_VARIABLE)

+0

無論是否定義,我的問題無關。如果if(!some_var){//做某事},只想要一種方法來做等價的事情; – Undistraction

4

蘋果文檔(If - The C Preprocessor)是正確的,這是方法是c預處理器語句一直以來,時間的黎明。按照同樣的文檔,你所能做的就是創建一個表達式,它的計算結果爲零或非零值並使用它。

Meccan的回答是正確的,因爲TARGET_IPHONE_SIMULATOR定義爲TRUEFALSE,具體取決於平臺,因此表達式將評估爲零或非零值。

通常這些宏(#if等)用於根據是否定義符號來包含或排除事物。對於該用例,預處理器具有#ifdef#ifndef,其涵蓋歷史上已被接受爲最重要的情況。

此外,鑑於這些陳述的主題只能是其他預處理器定義的符號(通過#define),那麼這個限制是合理的。

+0

https://gcc.gnu.org/onlinedocs/gcc-4.2.4/cpp.pdf –

相關問題