35

我目前正在使用 Xcode 4,在我的 .pch 文件中我有这个宏: #define localize(s) NSLocalizedString((s), nil).
当我尝试在某个 .m 文件中使用此宏时,我收到此警告:Implicit declaration of function 'localize' is invalid in C99.

这段代码编译没有问题,但我怎样才能解决这个问题,这样我就不会收到警告?

4

5 回答 5

51

当我用 DLog 全局替换 NSLog 时,我遇到了这个问题。我愚蠢地包括了

#define DLog(...) NSLog(...

声明,所以我最终得到

#define DLog(...) DLog(...

这导致了警告和链接器错误。

于 2012-12-12T18:25:06.793 回答
34

隐式函数声明是编译器第一次看到用作函数调用的那些(与首先看到原型或函数定义的那些相反)。

显然您的代码已使用localize(foo),但宏定义不可见。可能的原因:您忘记#include了包含localize宏的文件或头文件的预编译不包括localize宏,因此未扩展。

于 2011-08-25T12:10:46.157 回答
2

我遇到的另一个“愚蠢”错误是我的 DLog 是在 iOS 目标的前缀标头中定义的,所以我不得不将它复制到 OSX 目标的前缀,以及......

于 2013-07-28T14:50:11.690 回答
1

我遇到了这个问题,因为我不小心像这样导入了 CocoaLumberjack:

#import <CocoaLumberjack/DDLog.h>

显然 CocoaLumberjack 团队将代码模块化了一些。和类似的宏DDLogError现在在它们自己的头文件中单独定义。

我用这个替换了 import 语句,错误就消失了:

#import <CocoaLumberjack/CocoaLumberjack.h>
于 2014-10-16T09:09:44.343 回答
1

在我的情况下,只有一个文件给出了这个错误。原来我将它添加到项目的测试目标成员中(在右侧的文件检查器中)。

于 2017-01-29T00:17:02.037 回答