使用__LINE__删除NSInteger警告

时间:2014-11-04 19:14:27

标签: objective-c c-preprocessor iphone-64bit

我有一个日志功能:

#define LOGERROR(err) if(err) {                     \
    LOGTRACE(@"[NSError] %s (%d): (%d:%@) Reason: %@",  \
        __PRETTY_FUNCTION__,                            \
        __LINE__,                                       \
        err.code,                                       \
        err.domain,                                     \
        err.localizedDescription)                       \
}

当我用

打电话时
LOGERROR(playerItem.error);

我收到警告:" NSInteger不应该用作格式参数,为long"添加显式强制转换。

Xcode的自动修复程序在LOGERROR之前插入%ld,这是错误的。

我认为此警告来自使用__LINE__,根据https://gcc.gnu.org/onlinedocs/cpp/Standard-Predefined-Macros.html返回一个int。

如何从此次通话中删除警告?

1 个答案:

答案 0 :(得分:1)

只是将我在评论中给出的答案正式化:

编译器抱怨使用err.code,它返回一个NSInteger。将其投放到long(long)(err.code),然后在格式字符串中使用%ld