"没有以前的功能原型"警告

Wan*_*hao 45 iphone ipad ios

我使用shareKit自己编程.

但是在FBConnectGlobal中,有一些警告,

NSMutableArray* FBCreateNonRetainingArray() {
  CFArrayCallBacks callbacks = kCFTypeArrayCallBacks;
  callbacks.retain = RetainNoOp;
  callbacks.release = ReleaseNoOp;
  return (NSMutableArray*)CFArrayCreateMutable(nil, 0, &callbacks);
}
Run Code Online (Sandbox Code Playgroud)

像这个方法一样,它警告:"没有以前的函数FBCreateNonRetainingArray的原型"

dav*_*wen 62

根据c标准,将原型声明为

NSMutableArray* FBCreateNonRetainingArray(void);
//      --------------->                  ^^^^   
// Yes, with the void as the parameter
Run Code Online (Sandbox Code Playgroud)

解决了这个问题.

  • 假设您正在尝试导出该函数(即其原型位于标题中),这是您想要执行的实际操作.如果你的函数是静态范围的(即应该只从定义它的文件中看到)那么确定,将静态放在其前面就像其他人建议的那样也可以完成.当处理空闲的空间中没有空白的巨大/遗留代码库时,确保关闭警告可能是更容易的方法. (9认同)

Der*_*ner 49

为了澄清Eric Dchao上面的回答,facebook上的某个人显然没有在BOOL面前放置"静态"?

无论如何,改变这一点

BOOL FBIsDeviceIPad() {
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 30200
  if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
    return YES;
  }
#endif
  return NO;
}
Run Code Online (Sandbox Code Playgroud)

对此

static BOOL FBIsDeviceIPad() {
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 30200
  if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
    return YES;
  }
#endif
  return NO;
}
Run Code Online (Sandbox Code Playgroud)

为我修好了.


fan*_*ard 28

更新:禁用警告不是一个好的解决方案,请查看@Derek Bredensteiner的答案.

在Xcode 4中,转到项目的Build Settings.搜索"原型".应该有一个名为"Missing Function Prototypes"的选项; 禁用它.

通过这里


bas*_*ker 7

它是一个全球函数吗?如果仅在当前文件中使用,则添加" static ".

可能的原因如下:

之前没有'foo'的原型

这意味着GCC找到了一个全局函数定义而没有看到该函数的原型.如果函数在多个文件中使用,那么在某个头文件中应该有一个原型.这使功能及其用途不会失去同步

如果该函数仅用于此文件,请将其设置为静态以保证它永远不会在此文件之外使用并记录它是本地函数