为了账号安全,请及时绑定邮箱和手机立即绑定

如果函数没有返回值,并且返回类型有效,编译器是否可以抛出垃圾?

如果函数没有返回值,并且返回类型有效,编译器是否可以抛出垃圾?

C++ C
ITMISS 2019-08-23 09:48:20
如果函数没有返回值,并且返回类型有效,编译器是否可以抛出垃圾?如果函数的返回类型不是void,并且函数没有返回任何内容,那么我猜编译器会返回一个垃圾值(可能被视为未初始化的值)。它发生在编译时,为什么不应该抛出错误呢?例如,int func1() {    return; // error}int func2() {    // does not return anything}第二个func2应该抛出错误,但事实并非如此。有原因吗?我的想法是,它可以看作是一个未初始化的值,所以如果我们需要在第二种情况下抛出错误,那么我们需要抛出错误,如果一个值是未初始化的,比如说  int i;  // error  int i = 6;  // okay有什么想法,或者这是一个重复的问题?我感谢您的帮助。
查看完整描述

3 回答

?
潇潇雨雨

TA贡献1833条经验 获得超4个赞

在C中,只要调用代码不尝试使用返回值,非void函数完成而不返回值实际上是合法的。

另一方面,return不允许在非void函数中出现没有表达式的语句。

对于第一种情况,C99标准的相关部分是§6.9.1:

如果}终止了函数,并且调用者使用了函数调用的值,则行为是未定义的。

和第二种情况的§6.8.6.4:

return没有表达式的语句只能出现在返回类型为的函数中void


查看完整回答
反对 回复 2019-08-23
  • 3 回答
  • 0 关注
  • 480 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信