隐含的函数声明 - C99

Mis*_*isa 33 macros xcode objective-c c99 pch

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

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

JPs*_*ree 51

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

#define DLog(...) NSLog(...
Run Code Online (Sandbox Code Playgroud)

陈述,所以我结束了

#define DLog(...) DLog(...
Run Code Online (Sandbox Code Playgroud)

这导致警告和链接器错误.


Jen*_*ens 34

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

显然你的代码使用localize(foo)但宏定义不可见.可能的原因:你忘#include了包含localize宏的文件或者标题的预编译向南,并没有包含localize宏,所以它保持未展开状态.

  • 但是,如果宏在项目的前缀头中定义,则表示Xcode中存在错误,因为该头应该预编译并可供所有编译单元使用(例如,项目中的每个.m文件).FWIW我仍然偶尔在Xcode 4.4.1中看到这个bug,但是退出并重新启动Xcode修复了它. (3认同)
  • 这可能是在'标题的预编译向南'下提交的.随着工具中的错误,任何事情都可能发生. (2认同)