我目前正在使用 Xcode 4,在我的 .pch 文件中我有这个宏:
#define localize(s) NSLocalizedString((s), nil)
.
当我尝试在某个 .m 文件中使用此宏时,我收到此警告:Implicit declaration of function 'localize' is invalid in C99
.
这段代码编译没有问题,但我怎样才能解决这个问题,这样我就不会收到警告?
我目前正在使用 Xcode 4,在我的 .pch 文件中我有这个宏:
#define localize(s) NSLocalizedString((s), nil)
.
当我尝试在某个 .m 文件中使用此宏时,我收到此警告:Implicit declaration of function 'localize' is invalid in C99
.
这段代码编译没有问题,但我怎样才能解决这个问题,这样我就不会收到警告?
当我用 DLog 全局替换 NSLog 时,我遇到了这个问题。我愚蠢地包括了
#define DLog(...) NSLog(...
声明,所以我最终得到
#define DLog(...) DLog(...
这导致了警告和链接器错误。
隐式函数声明是编译器第一次看到用作函数调用的那些(与首先看到原型或函数定义的那些相反)。
显然您的代码已使用localize(foo)
,但宏定义不可见。可能的原因:您忘记#include
了包含localize
宏的文件或头文件的预编译不包括localize
宏,因此未扩展。
我遇到的另一个“愚蠢”错误是我的 DLog 是在 iOS 目标的前缀标头中定义的,所以我不得不将它复制到 OSX 目标的前缀,以及......
我遇到了这个问题,因为我不小心像这样导入了 CocoaLumberjack:
#import <CocoaLumberjack/DDLog.h>
显然 CocoaLumberjack 团队将代码模块化了一些。和类似的宏DDLogError
现在在它们自己的头文件中单独定义。
我用这个替换了 import 语句,错误就消失了:
#import <CocoaLumberjack/CocoaLumberjack.h>
在我的情况下,只有一个文件给出了这个错误。原来我将它添加到项目的测试目标成员中(在右侧的文件检查器中)。