当函数缺少返回值时,编译器会生成警告但不会出错?

时间:2014-02-19 03:15:00

标签: c++ function xcode5

这是一个c ++函数:

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

在MSVC中,编译器会生成错误:

  

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

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

  

控制到达非空函数的结尾

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

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

2 个答案:

答案 0 :(得分:7)

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

这是clanggcc中的一个选项,据我所知XCode可以使用其中任何一个。

返回值返回函数的结尾是undefined behavior,我们可以通过转到draft C++ standard部分6.6.3 返回语句 2 说:

  

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

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

答案 1 :(得分:2)

您可以使用-Werror=return-type

启用它
  

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

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