首页 >后端开发 >C++ >为什么没有显式'return”语句的 C 函数编译时不会出错?

为什么没有显式'return”语句的 C 函数编译时不会出错?

Patricia Arquette
Patricia Arquette原创
2024-12-17 08:13:24517浏览

Why Does a C   Function Without an Explicit `return` Statement Compile Without Error?

C 语言中返回未定义值的函数

在库中出现的代码片段中,名为 Min 的函数定义如下:

static tvec4 Min(const tvec4& a, const tvec4& b, tvec4& out)
{
    tvec3::Min(a,b,out);
    out.w = min(a.w,b.w);
}

出乎意料的是,尽管没有返回值,但该函数编译时没有错误,因为它的返回类型未显式声明为 void。

根据 C 11 标准草案第 6.6.3 节,此行为未定义。该标准规定“从函数末尾流出相当于没有值的返回”,并且“这会导致返回值的函数中出现未定义的行为。”

在这种情况下,编译器是没有义务提供错误或警告,因为在所有情况下都可能很难准确诊断问题。

但是,使用 -Wall 标志,可以提示 GCC 和 Clang 生成警告类似于:

warning: control reaches end of non-void function [-Wreturn-type]

要将此警告转换为错误,确保更高级别的代码质量,可以使用 -Werror=return-type 标志。此外,建议使用 -Wextra -Wconversion -pedantic 标志进行全面的错误检测。

在 Visual Studio 中,上述代码将触发错误 C4716:

error C4716: 'Min' : must return a value

如果并非所有代码路径返回一个值,则会发出警告 C4715。

以上是为什么没有显式'return”语句的 C 函数编译时不会出错?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn