2012-08-17 30 views
1

我想使用在Objective-C中,如何測試宏定義值?

#define IS_APP_FULL_VERSION NO 

和代碼

isAppFullVersion = IS_APP_FULL_VERSION; 

設置實例變量。但是,有沒有辦法也做

#if IS_APP_FULL_VERSION == "NO" 

// add some methods here 

#endif 

但它會給出一個編譯錯誤,所以是#if (IS_APP_FULL_VERSION == "NO")。有沒有辦法根據YESNO來檢查它? (覈對替代值)


更新:好像>== 0是允許的,如

#if IS_APP_FULL_VERSION == 0 

,所以我們實際上可以使用01虛假和真實的,請使用== 1進行測試,但如果可以使用YESNO,則會更好。


更新2:

一個可能的解決方案被證明是:

#define IS_APP_FULL_VERSION 1 

#if IS_APP_FULL_VERSION 

// add some methods here 

#endif 

isAppFullVersion = IS_APP_FULL_VERSION; 

將所有的工作,我們可以只改變10切換的代碼。

+0

這裏有兩個問題:1)「NO」的值爲零,並且在測試變量的值之前會發生替換。 2)沒有宏功能來評估表達式' == '。 – 2012-08-17 02:14:05

回答

0

其實,通常情況下,我只想用一個標誌宏,而不是價值之一,因爲這裏有只有兩種情況:

#define APP_IS_FULL_VERSION 

無論是定義或不定義宏。然後,如果以後要包含/排除基於這些代碼,你可以使用:

#ifdef APP_IS_FULL_VERSION 
    // Do something 
#endif 

(或#ifndef了相反的情況,很明顯)。

的代碼段,它的使用來選擇正確的代碼的一個簡單的問題:

#ifdef APP_IS_FULL_VERSION 
    isAppFullVersion = YES; 
#else 
    isAppFullVersion = NO; 
#endif 
+0

'NO'是objective-c中定義的符號(它表示錯誤) – borrrden 2012-08-17 02:05:52

1

我想,你是有些糊塗比較MACRO。

#define其格式如下。

#define MACRO_NAME VALUEVALUE是空白空間也不錯。MACRO_NAME需要的是。)

,如果你想下面好像比較編譯時間。這只是比較意味着只有defined vs no defined。不YES VS NO

#define IS_APP_FULL_VERSION 1 

#if defined IS_APP_FULL_VERSION 
    NSLog(@"full-verison"); 
#endif 

#define IS_APP_FULL_VERSION blahblah 

#if defined IS_APP_FULL_VERSION 
     NSLog(@"full-verison"); 
#endif 

如果你想建立的獨立版本。請參考下面的內容。

#define IS_APP_FREE_VERSION 

#if defined IS_APP_FREE_VERSION 
    NSLog(@"free-version"); 
#endif 

#define IS_APP_FULL_VERSION 

#if defined IS_APP_FULL_VERISON 
    NSLog(@"full-version"); 
#endif 


,如果你想跟隨喜歡對比運行。這通常是比較。

#define IS_APP_FULL_VERSION 1  

if(IS_APP_FULL_VERSION) 
{ 
    NSLog(@"full-verison"); 
} 

#define IS_APP_FULL_VERSION 0  

if(!IS_APP_FULL_VERSION) 
{ 
    NSLog(@"no full-version"); 
} 
0

您的基本問題是,#如果聲明宏處理器只有一種數據類型 - 整數。所有#if表達式都用整數進行求值,未定義的符號被替換爲零。字符串表達式(包括比較)無法評估。