在没有返回语句的情况下到达函数结束
Reaching end of function without return statement
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如果到达终止函数的},并且函数调用的值被调用者使用,则行为未定义。
相关文章:
- 在函数结束后使用指向变量的指针是否安全?
- 防止我的向量在调用它的函数结束时被删除
- C++未使用的变量警告,即使我在函数结束时返回它
- 函数结束后指针会死亡吗?
- 函数结束后覆盖的指针
- 如何在函数结束时有效地释放矢量内存
- 如何从另一个函数中调用的函数结束程序 (C++)
- 删除不会在函数结束时释放内存
- 函数结束后儿童节点的树递归C 缺失值
- 如何直接从构造函数结束C 代码
- 当函数结束时,它的局部变量被解除分配
- 私有成员"current"的值在成员函数结束时发生异常更改
- 函数结束时的C SEG故障.参考线=闭合支架
- 在函数结束后仅释放 Segfault 与 vsnprintf 一起消失
- 函数结束后更改值
- 强制程序在函数结束 (C++) 后释放在函数期间分配的内存
- 警告 #1011:非 void 函数结束时缺少返回语句
- 函数结束后丢失指针数据
- 通过函数结束程序
- Visual C++ 是否需要在'main'函数结束之前暂停应用程序