作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一些旧版 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/
我是一名优秀的程序员,十分优秀!