在没有返回语句的情况下到达函数结尾
Posted
技术标签:
【中文标题】在没有返回语句的情况下到达函数结尾【英文标题】:Reaching end of function without return statement 【发布时间】:2016-09-06 02:27:57 【问题描述】: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 相关。如果有人能指出我在这些文件中的任何一份中的正确位置(我不在乎),我将不胜感激。
【问题讨论】:
【参考方案1】:在 C99 TC2 和 C11 中都是 6.9.1/12:
如果到达终止函数的
,并且调用者使用了函数调用的值,则行为未定义。
在 C++11 和 C++14 中是 [stmt.return]/2:
从函数的末尾流出相当于没有值的返回;这会导致值返回函数中的未定义行为
【讨论】:
【参考方案2】:至于第一句话(您的来源似乎是错误的或过时的):
C 2011 6.8.6.4 返回语句
1 带有表达式的 return 语句不得出现在返回类型为 void 的函数中。没有表达式的 return 语句只能出现在返回类型为 void 的函数中。
关于第二句:
C 2011 6.9.1 函数定义
12如果到达终止函数的,并且调用者使用了函数调用的值,则行为未定义。
【讨论】:
以上是关于在没有返回语句的情况下到达函数结尾的主要内容,如果未能解决你的问题,请参考以下文章
错误:函数返回 None 或在没有返回语句的情况下结束。但在哪里找不到? [复制]
该函数要么返回 None 要么在没有返回语句的情况下结束,使用 docker 将 python 与 mysql 连接起来
Xcode 认为由于 if/else 语句中的返回,控制可能会到达非 void 函数的末尾