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是的。我应该在发帖前测试一下。谢谢