gpt4 book ai didi

c - C 中的隐式返回值,在应该返回非 void 的函数中没有显式返回

转载 作者:行者123 更新时间:2023-11-30 18:48:55 24 4
gpt4 key购买 nike

我有一些旧版 C 代码,是在 Linux 上使用 gcc 版本 4.9.2 编译的,并在 [-Wreturn-type] 上出现返回类型警告。我有一个功能如下:

int somefn() {
// .. do something ..
// no explicit return statement
}

调用者的通话如下:

if (somefn()){
// handling of success
}
else {
// handling of failure
}

当警告被抑制时,编译+链接一切正常,而在运行时,我们可能会得到惊喜,可能会出现什么问题?

最佳答案

引用 C11,第 §6.9.1 章,函数定义,语义

If the } that terminates a function is reached, and the value of the function call is used by the caller, the behavior is undefined.

因此,该标准指定了函数定义的语义,并明确指出(对于非 void 函数返回类型)函数在没有 return 语句的情况下终止且返回值用于调用者原因 undefined behavior .

因此,它接受在语法上编写这样的函数是可能的,但尝试使用它将是 UB。它没有将此声明为约束违规,并且我认为符合要求的编译器没有理由产生“错误”。

如果您想要严格检查(顺便说一下,建议这样做),请使用 -Werror 选项。

关于c - C 中的隐式返回值,在应该返回非 void 的函数中没有显式返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44156721/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com