到达函数结束而没有return语句
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)
,特别是第二句话,但是我发现的所有内容都与函数main有关。 如果有人能指出我在这些文件中的任何一个文件中的正确位置(我不在乎哪个),我会很感激。
至于第一句话(你的来源似乎是错误的或过时的):
C 2011 6.8.6.4退货声明
1带有表达式的return语句不应出现在返回类型为void的函数中。 不带表达式的return语句只能出现在返回类型为void的函数中。
至于第二句话:
C 2011 6.9.1函数定义
12如果到达终止函数的},并且调用者使用函数调用的值,则行为未定义。
在C99 TC2和C11中,它是6.9.1 / 12:
如果到达终止函数的
}
,并且调用者使用函数调用的值,则行为是未定义的。
在C ++ 11和C ++ 14中,它是[stmt.return] / 2:
流出函数末尾相当于没有值的返回; 这会导致值返回函数中的未定义行为