iphone - 在PCH文件中定义一个宏,给出警告

标签 iphone objective-c ios cocoa-touch pch

我的PCH文件中有以下宏。

#ifdef DEBUG
    #define MYLOG(...) NSLog(__VA_ARGS__)
#else
    #define MYLOG(...) MYSERVERLOG(MYObject.enableLogging, __VA_ARGS__)
#endif

#define MYSERVERLOG(iLog, ...) iLog ? NSLog(__VA_ARGS__) : TRUE

现在,无论我放DEBUG = 0还是DEBUG = 1,它总是放在第一个子句中。但是,如果我在PCH中对DEBUG使用“if”而不是“ifdef”,那么它可以正常工作,但随后我的所有MYLOG语句都收到警告,说“未使用结果”。

我如何摆脱这种情况?

最佳答案

我猜您只有在DEBUG = 0时才会收到警告。问题在于,在通过预处理程序运行之后,编译器将看到如下代码:

...
MYObject.enableLogging ? NSLog(@"your log",...) : TRUE;
...

编译器可以让您忽略函数的结果,前提是该函数执行了您想要的任何操作且结果没有用。但是,当您遇到用三元运算符计算代码中的值的麻烦时,它期望您需要该计算的结果。如果知道永远不会使用该宏的结果,则可以将其强制转换为void以忽略它:
#define MYSERVERLOG(iLog, ...) ((void)(iLog ? NSLog(__VA_ARGS__) : TRUE))

如果您可能使用宏的结果,那么每次使用宏时都必须进行强制转换,而忽略结果,或者使用警告。在这种情况下,您仍应在宏周围加上括号,以避免可能出现的问题。
#define MYSERVERLOG(iLog, ...) (iLog ? NSLog(__VA_ARGS__) : TRUE)

关于iphone - 在PCH文件中定义一个宏,给出警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7184271/

相关文章:

iOS 11 列出所有应用程序

ios - 为什么这个应用程序从 Testflight 运行时会崩溃 100%,而从 Xcode 运行时可能会崩溃 10%

iphone - 如何手动强制关闭 NSURLConnection?

objective-c - 删除 NSTextView 上的一行文本

iphone - 如何遍历 UIView 的所有 subview 及其 subview 及其 subview

ios - 如何访问父类(super class)?

iPhone 应用程序通过两个 Wifi 网络共享数据

ios - 从 iPhone 获取温度

objective-c - Objective-C 中的方法语法

ios - 如何从以编程方式制作的按钮设置转场