首页 >后端开发 >C++ >尽管声明了返回类型,为什么 C 函数在没有显式返回语句的情况下编译?

尽管声明了返回类型,为什么 C 函数在没有显式返回语句的情况下编译?

Susan Sarandon
Susan Sarandon原创
2024-12-13 04:41:15788浏览

Why Does a C   Function Compile Without an Explicit Return Statement Despite Declaring a Return Type?

为什么这个 C 代码片段在缺少返回值的情况下仍能编译?

在提供的代码片段中:

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

函数 Min 被声明为返回 tvec4,但代码未提供显式返回语句。这就提出了一个问题,为什么编译器编译代码时没有错误。

未定义的行为

根据 C 11 草案标准,从值的末尾流出-返回函数而不提供返回值会导致未定义的行为。这意味着编译器在这种情况下没有义务发出错误或警告。

编译器选项

但是,编译器可以配置为警告甚至生成错误对于未定义的行为。例如,使用 -Wall 标志通常会触发如下警告:

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

通过添加 -Werror=return-type 标志,编译器会将此警告视为错误,强制代码已更正。

Visual Studio

在 Visual Studio 中,代码将生成错误默认情况下为 C4716:

error C4716: 'Min' : must return a value

如果并非所有代码路径都返回值,Visual Studio 将发出警告 (C4715)。

以上是尽管声明了返回类型,为什么 C 函数在没有显式返回语句的情况下编译?的详细内容。更多信息请关注PHP中文网其他相关文章!

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