为什么这个 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中文网其他相关文章!