2011-07-15 66 views
32
我目前使用的Xcode 4

,并在我的.PCH文件我有这样的宏: #define localize(s) NSLocalizedString((s), nil)
当我尝试在一些.m文件使用这个宏,我收到这样的警告:Implicit declaration of function 'localize' is invalid in C99隐声明 - C99

此代码编译没有问题,但我怎么能解决这个问题,所以我没有得到一个警告?

+0

我无法重现该问题,它编译并运行得很好,没有警告。 – Lio

+0

它似乎是XCode中的一个错误... 4.0.2我认为。 4.2 beta版工作正常。 – Misa

回答

34

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

显然你的代码中使用localize(foo)但宏定义是不可见的。可能的原因:你忘了#include包含本地化宏或头去南部一个不包括localize宏预编译的文件,所以它留给未展开。

+3

但是,如果在项目的前缀头文件中定义了宏,那么这将表明Xcode中存在一个错误,因为该头文件应该是预编译的并可供所有编译单元(例如项目中的每个.m文件)使用。 FWIW我偶尔会在Xcode 4.4.1中看到这个bug,但退出并重新启动Xcode会修复它。 – Mason

+2

这可能可以在'预编译头文件南下'的情况下提交。随着工具中的错误,任何事情都可能发生。 – Jens

+0

我在Xcode 5中看到过这种情况。摆脱警告信息的最安全的方法是在显示错误的文件中简单地包含相关头文件。 – JaredH

50

我有这个问题时,我做了一个全球性的NSLog与DLOG取代。我傻傻包括

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

报表,所以我结束了

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

这引起了警告和连接错误。

2

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

1

我有这个问题,因为我不小心进口CocoaLumberjack这样的:

#import <CocoaLumberjack/DDLog.h> 

显然,CocoaLumberjack队模块化的代码多一些;现在在它们自己的头文件中分别定义了像DDLogError这样的宏。

我替换为import语句和错误走了:

#import <CocoaLumberjack/CocoaLumberjack.h> 
1

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

相关问题