如何处理Xcode警告“没有以前的功能原型......”?

时间:2011-08-17 18:30:28

标签: objective-c xcode warnings

这个警告在一些第三方图书馆中出现了很多。

有没有办法在不修改代码的情况下处理它(例如忽略警告)?

如果我必须修改代码来修复它,我该怎么做?

这是导致警告的代码块之一:

BOOL FBIsDeviceIPad() {
 #if __IPHONE_OS_VERSION_MAX_ALLOWED >= 30200
  if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
   return YES;
  }
 #endif
  return NO;
}

4 个答案:

答案 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 只在文件中可见(具体来说,只能在文件的翻译单元中链接)。

这个警告的部分用途似乎是如果你有一个独立的函数,你要么希望它在其他实现文件中可用,要么只在定义它的文件中使用。此警告让您明确选择该选项,并帮助您了解标头是否与实现不同。

如果你想让它在其他实现文件中使用,你应该在某处的标题中放置它的原型。

如果你希望它只在这个文件中可用,那么它应该是静态的。