Objective c 函数的隐式声明-C99

Objective c 函数的隐式声明-C99,objective-c,xcode,macros,c99,pch,Objective C,Xcode,Macros,C99,Pch,我目前使用的是Xcode 4,在.pch文件中,我有一个宏: #定义本地化NSLocalizedString((s),nil) 当我尝试在某个.m文件中使用此宏时,收到以下警告:函数“localize”的隐式声明在C99中无效 这段代码编译时不会出现问题,但我如何才能解决这一问题,使我不会收到警告?隐式函数声明是编译器第一次将其用作函数调用的声明(与第一次看到原型或函数定义的声明相反) 显然,您的代码使用了localize(foo),但宏定义不可见。可能的原因:您忘记了包含#include包含本

我目前使用的是Xcode 4,在.pch文件中,我有一个宏:
#定义本地化NSLocalizedString((s),nil)

当我尝试在某个.m文件中使用此宏时,收到以下警告:
函数“localize”的隐式声明在C99中无效

这段代码编译时不会出现问题,但我如何才能解决这一问题,使我不会收到警告?

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


显然,您的代码使用了
localize(foo)
,但宏定义不可见。可能的原因:您忘记了包含
#include
包含
本地化
宏的文件或头的预编译失败,并且没有包含
本地化
宏,因此它没有展开。

我在使用DLog全局替换NSLog时遇到了这个问题。我愚蠢地把

#define DLog(...) NSLog(...
声明,所以我以

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

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

我遇到的另一个“愚蠢”错误是,我的DLog是在iOS目标的前缀头中定义的,因此我必须将其复制到OSX目标的前缀,以及…

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

#import <CocoaLumberjack/DDLog.h>

在我的例子中,只有一个文件给出了这个错误。结果是我将其添加到了项目的测试目标成员身份(在右侧的文件检查器中)。

我无法重现该问题,它编译并运行得很好,没有警告。似乎是XCode中的一个bug。。。4.0.2我想。4.2 Beta工作正常。但是如果宏是在项目的前缀头中定义的,那么这表明Xcode中存在错误,因为该头应该预编译并可用于所有编译单元(例如,项目中的每个.m文件)。FWIW我仍然偶尔在Xcode 4.4.1中看到这个bug,但是退出并重新启动Xcode修复了它。这可能是在“头的预编译”下提交的。有了工具中的bug,任何事情都有可能发生。我在Xcode 5中见过这种情况。消除警告消息最安全的方法是在显示错误的文件中包含相关的头文件。
#import <CocoaLumberjack/CocoaLumberjack.h>