我已经用谷歌搜索,但似乎找不到这个简单问题的答案。在旧版代码库上工作(最近移植到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;语句一样。
- 3 回答
- 0 关注
- 631 浏览
添加回答
举报
0/150
提交
取消