Objective c 试图在项目中禁用NSLog时引发错误

Objective c 试图在项目中禁用NSLog时引发错误,objective-c,c-preprocessor,nslog,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] \

我想禁用项目中的所有
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正在抛出 任何人都可以帮助我修复此错误。

您应该删除定义末尾的“;”

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

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

dict1 ? [temp addObject:dict1] : ;
不为三元运算符提供“else”值是不可能的,因此会出现错误

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

#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
构造应该是。

这仍然会给出一个错误,因为
do{}while(0)
是语句而不是表达式。类似于
define NSLog(fmt,…)(void)(0)
的东西应该可以工作但是我同意如果。。。否则…应该优先考虑。@MartinR是的。我应该在发帖前测试一下。谢谢