Swift iOS 14 Firebase警告 - 这个旧式函数定义没有原型声明。

9

我有一个使用Firebase集成的应用程序,使用cocoapods连接分析。在针对iOS 13构建时一切正常,没有任何黄色警告,但是当我安装了新的cocoapods并构建了针对iOS 14的应用程序后,会收到6个黄色警告信息:

"XXXPods/GoogleUtilities/GoogleUtilities/Logger/GULLogger.m:130:20:此旧式函数定义未被原型声明"

GULLogger.m Warnings

当我在网上寻找答案时,只有少数几篇文章指向Flutter。我没有为此应用程序安装Flutter,也不认为我需要安装。还有其他人遇到了同样的问题吗?如何在iOS 14上消除这个问题,请帮忙解决。

我可以将pods降级到iOS 13,但整个升级版本的意义就不存在了。非常感谢您的任何帮助和指导!

2个回答

16

因此,这是在 Xcode 12.5 中针对那些SDK中声明的旧C风格函数或使用该语法的任何旧样式代码的新警告。


这是什么意思?

do-not-leave-the-parameter-list-of-a-function-blank---use-void

如果函数声明不包括参数,例如double atof();,则也意味着不能假定任何有关atof参数的信息;所有参数检查都被关闭。空参数列表的这种特殊含义旨在允许旧的C程序与新编译器一起编译。但是,对于新程序来说,使用它是一个坏主意。如果函数需要参数,请声明它们;如果它不需要参数,请使用void。

因此,您的函数原型应如下所示:

int foo(void);

这是函数定义应该的写法:

int foo(void)
{
    ...
    <statements>
    ...
    return 1;
}
使用上述方式声明函数(即不使用关键字void,而是使用int foo()这样的声明方式)的优点之一是,如果使用错误语句(如foo(42))调用函数,编译器可以检测到错误。如果您将参数列表留空,则此类函数调用语句不会导致任何错误。错误会悄悄地通过,未被检测到,代码仍然会执行。
我们能做什么?
可能需要为Firebase SDK提出一个问题单(如果还没有)。
这个问题有多大?
这取决于实现细节。对于所有这些函数,可能只需将“()”替换为“(void)”即可解决此问题。否则,可能会涉及更多操作,如上所述。
Firebase团队定期维护SDK,我们应该很快在即将发布的版本中看到此问题的修复。

谢谢@Tarun,这样做可以了!将所有这些函数中的()替换为(void),消除了黄色警告,并且功能没有受到影响。 - Alessign
1
Firebase在Xcode 12.5推出后于二月份修复了此问题,详情请见https://github.com/google/GoogleUtilities/pull/8/files。运行`pod update`以更新到最新版本。 - Paul Beusterien

6

运行pod update

Xcode 12.5推出后,Firebase在二月份解决了这个问题github.com/google/GoogleUtilities/pull/8/files。


简单而有效!消除了我所有的错误。非常感谢! - Alex Aghajanov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接