2011-06-13 45 views
1

我已經添加了一些調試代碼到我的應用程序,我只想在需要時調用。我記得有一種IFDEF可用於有條件地將代碼包含到源文件中。如何僅在設置標誌時將代碼包含到構建中?

例如我可能有這樣的事情:

IFDEF kDebugEnabled == YES { 
    // some debugging code here 
} 

然後這段代碼只編譯成二進制如果kDebugEnabled是YES。

我該怎麼做這樣的事情?

請注意:我不想使用項目編譯器標誌設置。我只想定義一個BOOL(或者其他用途),這個BOOL是真或假,然後就可以很容易地將它設置在我的App Delegate中。我發現很難導航到項目編譯器設置,搜索標誌然後設置它。我知道有一個可能有用的調試標誌。

回答

5

你所尋找的是:

#ifdef __YOURSYMBOL__ 
    <conditional code> 
#endif 

您可以通過編程定義__YOURSYMBOL__這樣的:

#define __YOURSYMBOL__ 

__YOURSYMBOL__可以是任意的字符串,是有道理的你記住你爲什麼要包括/排除該代碼段。

DEBUG常數是一種特殊的預處理器常量,當代碼被編譯用於調試的編譯器專爲您定義,所以你可以簡單地使用它:

#ifdef DEBUG 
     <conditional code> 
#endif 

考慮到這是C-預處理器,不是C,也不是Objective-C,因此像kDebugEnabled == YES(其中kDebugEnabled是一個Objective-C變量)這樣的測試根本不可能。您可以爲常量定義整型值,如:

#define __LOG_LEVEL__ 3 

,然後測試它:

#if __LOG_LEVEL__ == 3 
    ... 
Endif 
3

據我所知,你不能有代碼在你的類是不編譯成最終產品而不使用編譯器標誌。但是,使用DEBUG標誌比您想象的要容易得多。如果您使用的是Xcode 4,則默認情況下會爲您設置。

#ifdef DEBUG 

    // Your debug-only code goes here 

#endif // DEBUG 

Xcode中具有,在默認情況下,兩種配置,DebugRelease。當您使用調試版本配置時,它會設置DEBUG編譯器標誌,然後您可以使用該標誌來有條件地編譯代碼。根本不需要混淆編譯設置。

相關問題