2012-03-26 18 views
1

我一直很高興地使用NSLog的替代品叫做DLog,這樣我就不用擔心在發佈版本中留下的調試問題。Obj-C,使用ifndef和目標參數只有printf調試行?

#ifndef NDEBUG 
# define DLog(FORMAT, ...) printf("%s\n", 
     [[NSString stringWithFormat:FORMAT, ##__VA_ARGS__] UTF8String]); 

#else 
# define DLog(...) 
#endif 

不過,我喜歡做一些比較複雜一點,我有許多目標與調試參數,我想包括兩個參數,使我得到的調試信息。

我希望我可以使用,這樣的事情...

#ifndef NDEBUG 
# define DLog(FORMAT, ...) printf("%s\n", ... 
#else 
#ifdef TESTFLIGHT && FREEMIUM 
# define DLog(FORMAT, ...) printf("%s\n", ... 
#else 
# define DLog(...) 
#endif 

但它不是這麼簡單..我可能失去了一些東西明顯?

我已經搜索了這個問題,但無法找到與此運算符和嵌套IF語句似乎也是一個問題?

回答

0

您應該使用「#elif」來生成一個else if而不是嵌套的ifs。

您可以使用#if defined(TESTFLIGHT)& & defined(FREEMIUM),就像對其他答案所說的那樣。所以:

#ifndef NDEBUG 
# define DLog(FORMAT, ...) printf("%s\n", ... 
#elif TESTFLIGHT && FREEMIUM 
# define DLog(FORMAT, ...) printf("%s\n", ... 
#else 
# define DLog(...) 
#endif 
2

當你使用這樣的定義存在,到結合使用這樣的語法:

#if defined TESTFLIGHT && defined FREEMIUM 

#ifdef是簡寫#if defined)。 使用#elif作爲「else if」級聯而不嵌套。


可以使用直像你想,如果你定義的常量等於東西(例如1),而不是隻是被「定義」的布爾運算符。例如

#define TESTFLIGHT 1 
#define FREEMIUM 1 

... 

#if TESTFLIGHT && FREEMIUM 
0

你需要使用 「正常」 #if

#if defined(TESTFLIGHT) && defined(FREEMIUM 

#ifdef FOO簡直簡稱#if defined(FOO)

你還缺少一個#endif。如此完整,它是:

#ifndef NDEBUG 
# define DLog(FORMAT, ...) printf("%s\n", ... 
#else 
# if defined(TESTFLIGHT) && defined(FREEMIUM) 
# define DLog(FORMAT, ...) printf("%s\n", ... 
# else 
# define DLog(...) 
# endif 
#endif