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

C函数的隐式int返回值

C函数的隐式int返回值

C
慕标5832272 2019-10-21 15:06:55
我已经用谷歌搜索,但似乎找不到这个简单问题的答案。在旧版代码库上工作(最近移植到Linux,然后慢慢更新到新的编译器),我发现很多int myfunction(...){// no return...}我知道函数的隐式返回类型是int,但是没有指定返回时的隐式返回值是什么。我已经测试并获得0,但这仅适用于gcc。这个编译器是特定的还是标准定义为0?编辑:12/2017调整可接受的答案基于它引用了该标准的最新版本。
查看完整描述

3 回答

?
qq_遁去的一_1

TA贡献1725条经验 获得超7个赞

即使函数的返回类型不是,return语句也不会在函数末尾强制执行void。不需要诊断,并且它不是未定义的行为。


示例(定义的行为):


int foo(void)

{

}


int main()

{

    foo();

}

但是读取的返回值foo是未定义的行为:


int bla = foo();  // undefined behavior

从C标准:


(C99,6.9.1p12)“如果到达终止函数的},并且调用者使用了函数调用的值,则该行为未定义。”


该main函数是该规则的例外,就像}到达该规则一样,main就好像有一条return 0;语句一样。


查看完整回答
反对 回复 2019-10-21
  • 3 回答
  • 0 关注
  • 601 浏览

添加回答

举报

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