NSLog在尝试在项目中禁用它时抛出错误

时间:2014-08-13 12:27:26

标签: objective-c c-preprocessor nslog

我想禁用项目中的所有NSLog。在项目中,我添加了一个库。当我尝试禁用除库以外的项目中的所有NSLog时它工作正常。 但是当我尝试在库项目中添加它时,它会抛出错误。

我试过这段代码

// Enable debug (NSLog)
//#define DEVLOPENV 1 // comment this to disable the nslogs

#ifdef DEVLOPENV
#   define NSLog(fmt, ...) NSLog((@"\n%s : [Line - %d] \n" fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__);
#else
#   define NSLog(fmt, ...)
#endif

xcode正在投掷 enter image description here 任何人都可以帮我解决这个错误。

2 个答案:

答案 0 :(得分:1)

当宏在编译时展开时,您的代码将如下所示:

dict1 ? [temp addObject:dict1] : ;

不提供"否则"三元运算符的值是不可能的,因此是错误。

您可以像这样定义宏来解决问题:

#ifdef DEVLOPENV
#   define NSLog(fmt, ...) NSLog((@"\n%s : [Line - %d] \n" fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__);
#else
#   define NSLog(fmt, ...) (void)(0)
#endif

您的代码将如下所示:

dict1 ? [temp addObject:dict1] : (void)(0);

(void)(0)是一种无操作,实现了预期的行为。

但是,在这种特殊情况下,我建议避免使用三元运算符。经典if...else结构为more readable and appropriate

答案 1 :(得分:0)

你应该删除";"在定义的最后。

#define NSLog(fmt, ...) NSLog((@"\n%s : [Line - %d] \n" fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__)