在没有返回语句的情况下到达函数结束

Reaching end of function without return statement

本文关键字:函数 结束 情况下 返回 语句      更新时间:2023-10-16

ANSI X3.159-1989,第3.6.6.4节,第33-35行规定:

"如果执行了不带表达式的return语句,则函数调用的值是由调用者使用的,行为是未定义的。到达终止函数的}等价于执行不带表达式的返回语句"

我一直在看ISO/IEC 9899:1999(E), ISO/IEC 9899:2011(E), ISO/IEC 14882:2011(E)ISO/IEC 14882:2014(E)类似的陈述,特别是第二句,但我发现的所有内容都与功能主要有关。如果有人能在这些文件中的任何一个(我不在乎哪个)中指出正确的位置,我将不胜感激。

在C99 TC2和C11中都是6.9.1/12:

如果达到终止函数的},并且函数调用的值被调用方使用,则该行为未定义。

在c++ 11和c++ 14中是[stmt.return]/2:

从函数末尾流出相当于没有返回值;这将导致值返回函数

中的未定义行为。

关于第一句话(你的来源似乎是错误的或过时的):

C 2011 6.8.6.4返回语句

1带表达式的返回语句不能出现在返回类型为void的函数中。不带表达式的return语句只能出现在返回类型为void的函数中。

关于第二句:

C 2011 6.9.1函数定义

12如果到达终止函数的},并且函数调用的值被调用者使用,则行为未定义。