这个警告在一些第三方图书馆中出现了很多。
有没有办法在不修改代码的情况下处理它(例如忽略警告)?
如果我必须修改代码来修复它,我该怎么做?
这是导致警告的代码块之一:
BOOL FBIsDeviceIPad() {
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 30200
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
return YES;
}
#endif
return NO;
}
答案 0 :(得分:79)
通常有这样的警告你可以在文件的顶部定义一个函数原型,例如:
BOOL FBIsDeviceIPad();
但在C语言中,大括号之间没有任何内容,即()
实际上意味着有任意数量的参数。相反,定义应变为(void)
以表示否参数:
BOOL FBIsDeviceIPad(void);
...
BOOL FBIsDeviceIPad(void) {
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 30200
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
return YES;
}
#endif
return NO;
}
答案 1 :(得分:29)
在Xcode4中,转到项目的Build Settings。搜索“原型”。应该有一个名为“Missing Function Prototypes”的选项;禁用它。您也可以对相关的特定目标执行此操作。
答案 2 :(得分:1)
如果将此类函数定义为内联,则没有警告。
只要您的功能针对内联使用进行了优化,这就足够了。 http://msdn.microsoft.com/en-us/library/1w2887zk.aspx
答案 3 :(得分:0)
修复警告的另一种方法是使函数 static
只在文件中可见(具体来说,只能在文件的翻译单元中链接)。
这个警告的部分用途似乎是如果你有一个独立的函数,你要么希望它在其他实现文件中可用,要么只在定义它的文件中使用。此警告让您明确选择该选项,并帮助您了解标头是否与实现不同。
如果你想让它在其他实现文件中使用,你应该在某处的标题中放置它的原型。
如果你希望它只在这个文件中可用,那么它应该是静态的。