【问题标题】:When a function missing the return value, the compiler generates a warning but not an error?当函数缺少返回值时,编译器会产生警告而不是错误?
【发布时间】:2014-03-19 04:21:27
【问题描述】:

这是一个 c++ 函数:

int FuncWithoutReturn()
{
  int var = 10;
  ++var;
  // No return value here !!!
}

在 MSVC 中,编译器产生错误:

错误 C4716:“FuncWithoutReturn”:必须返回一个值。

但在 XCode 5 中,编译器只是发出警告:

控制到达非空函数的结尾

如果我幸运的话,在运行时,应用程序会崩溃。我知道这是一个愚蠢的错误,但编译器首先产生错误会很好。

只是想知道有人知道为什么 XCode 认为这是警告而不是错误。

【问题讨论】:

  • 感谢您的回答,但是是否有任何情况下故意缺少返回值?我的意思是我的情况,那是一个错误。但是由于编译器默认认为错误是警告。我想一定是有原因的,WHY...

标签: c++ function xcode5


【解决方案1】:

您可以使用-Werror=return-type 启用它

只是想知道有人知道为什么 XCode 认为这是警告而不是错误。

检查项目/目标/xcconfig 的“返回类型不匹配”设置(又名GCC_WARN_ABOUT_RETURN_TYPE)。

【讨论】:

    【解决方案2】:

    您可以使用-Werror=return-type 发出警告和错误,在我原来的评论中我忘记了。你可以看到它live

    这在clanggcc 中都是一个选项,据我了解XCode 可以使用其中任何一个。

    结束值返回函数是undefined behavior,我们可以通过draft C++ standard部分看到这一点6.6.3 返回语句段落2其中说:

    [...]从函数的末尾流出相当于没有值的返回;这会在返回值的函数中导致未定义的行为。

    未定义行为不需要诊断(警告或错误),尽管在许多情况下编译器会提供诊断。

    【讨论】:

    • 标准,是的,这就是我想知道的。谢谢。
    • 其实我还是想知道为什么编写标准的人认为这样更好。
    • 我们都想知道:)
    猜你喜欢
    • 2018-03-18
    • 1970-01-01
    • 2011-03-03
    • 2020-10-23
    • 1970-01-01
    • 2015-09-19
    • 1970-01-01
    • 2015-06-01
    • 1970-01-01
    相关资源
    最近更新 更多