在没有return语句的情况下到达函数结尾

时间:2016-09-06 02:27:57

标签: c++ c language-lawyer

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

  

“如果执行没有表达式的return语句,则执行   调用者使用函数调用的值,行为是   未定义。到达终止函数的}等同于   执行没有表达式的return语句。“

我一直在浏览ISO/IEC 9899:1999(E)ISO/IEC 9899:2011(E)ISO/IEC 14882:2011(E)ISO/IEC 14882:2014(E)以查找类似的陈述,特别是第二句话,但关于我所有的一切; ve发现属于功能主要。如果有人能指出我在这些文件中的任何一个文件中的正确位置(我不在乎),我会很感激。

2 个答案:

答案 0 :(得分:3)

在C99 TC2和C11中,它是6.9.1 / 12:

  

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

在C ++ 11和C ++ 14中,它是[stmt.return] / 2:

  

离开函数末尾相当于没有值的返回;这会导致值返回函数中的未定义行为

答案 1 :(得分:2)

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

  

C 2011 6.8.6.4退货声明

     

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

至于第二句:

  

C 2011 6.9.1功能定义

     

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