当函数缺少返回值时,编译器会生成警告而不是错误? 这里是C++函数: int FuncWithoutReturn() { int var = 10; ++var; // No return value here !!! }

当函数缺少返回值时,编译器会生成警告而不是错误? 这里是C++函数: int FuncWithoutReturn() { int var = 10; ++var; // No return value here !!! },c++,function,xcode5,C++,Function,Xcode5,在MSVC中,编译器生成错误: 错误C4716:“FuncWithoutReturn”:必须返回一个值 但在XCode 5中,编译器只是发出警告: 控件到达非void函数的末尾 如果幸运的话,在运行时,应用程序会崩溃。我知道这是一个愚蠢的错误,但最好编译器首先产生一个错误 只是想知道为什么XCode会认为这是一个警告而不是错误。您可以使用-Werror=返回类型 只是想知道为什么XCode会认为这是一个警告而不是一个错误 检查项目的/target/xcconfig设置是否存在“不匹配的返回类型”

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

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

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

控件到达非void函数的末尾

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


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

您可以使用
-Werror=返回类型

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


检查项目的/target/xcconfig设置是否存在“不匹配的返回类型”(也称为
GCC\u WARN\u关于返回类型
)。

您可以使用
-Werror=Return Type
发出警告和错误,在我的原始评论中,我忘记了这一点。你可以看到

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

从值的结束返回函数中可以看出,我们可以通过查看返回语句第2段中的
6.6.3

从函数末尾流出的[…]等价于没有值的返回;这会导致值返回函数中出现未定义的行为


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

谢谢您的回答,但是是否存在故意丢失返回值的情况?我是说我的案子,那是个错误。但是由于编译器认为默认情况下错误是一个警告。我想一定有原因,为什么…标准,是的,这就是我想知道的。谢谢。实际上我还是想知道为什么编写标准的人认为这样更好。我们都想知道:)