控制到达非 void 函数的末尾是 xcode 上的错误,但不是 gcc 上的错误

Posted

技术标签:

【中文标题】控制到达非 void 函数的末尾是 xcode 上的错误,但不是 gcc 上的错误【英文标题】:control reaches end of non-void function is error on xcode but not error on gcc 【发布时间】:2017-01-24 00:55:48 【问题描述】:

嗨,我有一个问题。

bool testFunction(int arg)  int value = arg; 

这个函数在 gcc 上不是错误,而只是出现警告。

但是在 xcode 中,这个来源是错误的。 "控制到达非空函数的结尾"

我不知道为什么 xcode 会出错。

确保将警告视为错误选项在 xcode 中设置为 NO。

谢谢。

【问题讨论】:

你只返回一个值怎么样? 哈哈。你的评论是对的。但是,我没有写那个来源。很多人都会犯类似的错误,所以我想要一个错误。 :) 哦,我以为您是在尝试消除错误消息。我的错。继续! 【参考方案1】:

在 C++ 中,non-void 函数不返回任何内容是未定义的行为

请记住,编译器不应该从您的代码中消除 UB。他们根本无法检测到所有的 UB 模式;他们只能在“怀疑”时发出警告。

这种模式被“允许”是为了向后兼容旧代码。这是程序员的责任。

在大多数(如果不是所有)编译器中,都有一个选项可以将此特定警告设置为错误。此选项不同于“将所有警告视为错误”。它似乎是在您的 XCode 环境中设置的。查看this thread 了解如何在 XCode 中找到此选项。

【讨论】:

谢谢你的好信息。以上源代码存在于头文件的类中。并且没有使用它。但是如果我使用该功能,则会发生错误。我希望在 vs 中发生错误,即使此功能也没有使用。(因为其他人犯了同样的错误。)。有可能吗??? 不是库,拥有我的代码。和 vs 版本是 2012 :) 你用的是哪个版本的VS?在我的 VS2015 中这是一个错误。 VS2012 和 11.0.61219.00 更新5。函数只在头文件中声明而不使用函数是否会发生错误? 如果函数在头文件中定义,那么在编译任何包含它的源文件时都会出现错误。但是,如果函数仅在头文件中声明,则不,仅在定义的地方。【参考方案2】:

不同的编译器警告不同的事情。 在这种情况下应该真的会出现错误或警告,因为您的函数应该返回一个值。

如果您将 -Wall 或 -Wreturn-type 标志添加到 g++,您将收到警告。 您可以通过调整构建设置“不匹配的返回类型”值在 Xcode 中执行等效操作。共有三种设置。

    是 - 警告 否 - 忽略 是(错误) - 将此视为错误

见附件截图。

关闭此功能可能会导致您遗漏其他错误,因此最好至少将其保留为警告设置。

【讨论】:

@성정민 如果问题已经解决,请选择正确答案。如果不让我们知道是否有任何其他问题。这也将有所帮助,因为它可以让用户专注于开放性问题。谢谢 谢谢!但是,我认为比解决 ios 错误更重要的视觉工作室发生错误。因为以上来源错误来源和糟糕的情况。所以,我需要在 vs. 中发生错误:)

以上是关于控制到达非 void 函数的末尾是 xcode 上的错误,但不是 gcc 上的错误的主要内容,如果未能解决你的问题,请参考以下文章

C++ 函数(错误:控制可能到达非 void 函数的末尾)

在 Xcode 中接收“控制到达非无效函数的末尾”错误消息

错误:控制可能到达非空函数的结尾

使用switch语句在函数中没有返回

warning: control reaches end of non-void function

如何在 oracle pl sql 中使用 LAG 函数,直到到达非零或最后一行?