我目前正在使用Xcode 4,在我的.pch文件中我有这个宏:
#define localize(s) NSLocalizedString((s), nil)
。
当我尝试在某个.m文件中使用此宏时,收到此警告:Implicit declaration of function 'localize' is invalid in C99
。
此代码编译没有问题,但我如何解决这个问题,所以我没有得到警告?
答案 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中)。