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发现属于功能主要。如果有人能指出我在这些文件中的任何一个文件中的正确位置(我不在乎),我会很感激。
答案 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 如果到达了终止函数的},并且调用者使用了函数调用的值,则行为未定义。