2014-05-05 16 views
1

我在我的項目dlog下面的代碼應該在控制檯中打印值,如果isConsoleLogActive爲YES。運營商'定義'需要一個標識符ios

它給錯誤,如操作員「定義」需要一個標識符

#if defined ([Util isConsoleLogActive])// Operator 'defined' requires an identifier in this line 
#define DLog(...) NSLog(__VA_ARGS__) 
#define DTrace() NSLog(@"%s", __PRETTY_FUNCTION__) 
#else 
#define DLog(...) /* */ 
#define DTrace() /* */ 
#endif 

,如果我在的.m使用相同的代碼([Util isConsoleLogActive])它完美的罰款。我只在#define

這個問題上遇到了什麼問題。請給我一些想法。

回答

3

#開頭的各種命令是預處理器指令。這些在構建時在編譯階段之前執行,在應用程序實際執行之前執行。您應該使用預處理器指令,根據構建配置在應用程序中有條件地包含不同的代碼。然而,預處理器是在運行時處理特定平臺上的條件執行的錯誤方式;爲此,您需要標準的「if ... else」邏輯。

如果您使用該語句的目標是確定給定的選擇器是否存在,請嘗試respondsToSelector

1

[Util isConsoleLogActive] 

結果不是在編譯時已知的。所以你不能用'#if defined'來使用它。