隐含的函数声明 - C99

时间:2011-07-15 08:21:49

标签: objective-c xcode macros c99 pch

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

此代码编译没有问题,但我如何解决这个问题,所以我没有得到警告?

5 个答案:

答案 0 :(得分:51)

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

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

陈述,所以我最终得到了

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

导致警告和链接器错误。

答案 1 :(得分:34)

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

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

答案 2 :(得分:2)

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

答案 3 :(得分:1)

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

#import <CocoaLumberjack/DDLog.h>

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

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

#import <CocoaLumberjack/CocoaLumberjack.h>

答案 4 :(得分:1)

在我的情况下,只有一个文件发出此错误。原来我把它添加到了项目的测试目标成员资格中(在右边的File Inspector中)。