这是一个c ++函数:
int FuncWithoutReturn()
{
int var = 10;
++var;
// No return value here !!!
}
在MSVC中,编译器会生成错误:
错误C4716:'FuncWithoutReturn':必须返回一个值。
但是在XCode 5中,编译器只是发出警告:
控制到达非空函数的结尾
在运行时如果我很幸运,应用程序崩溃了。我知道这是一个愚蠢的错误,但编译器首先产生错误会很好。
只是想知道为什么XCode认为这是警告而不是错误。
答案 0 :(得分:7)
您可以使用-Werror=return-type
发出警告和错误,在我原来的评论中,我忘记了。你可以看到它live。
这是clang和gcc中的一个选项,据我所知XCode
可以使用其中任何一个。
返回值返回函数的结尾是undefined behavior,我们可以通过转到draft C++ standard部分6.6.3
返回语句段 2 说:
[...]离开函数末尾相当于没有值的返回;这会导致值返回函数中的未定义行为。
未定义的行为不需要诊断(警告或错误),但在许多情况下编译器会提供诊断。
答案 1 :(得分:2)
您可以使用-Werror=return-type
只是想知道为什么XCode认为这是警告而不是错误。
检查项目/目标的/ xcconfig设置“不匹配的返回类型”(又名GCC_WARN_ABOUT_RETURN_TYPE
)。