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

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 连接起来

关于SQL语句中SUM函数返回NULL的解决办法

Xcode 认为由于 if/else 语句中的返回,控制可能会到达非 void 函数的末尾

在啥情况下会在控制权到达 main() 函数之前发生崩溃? [复制]

如何在没有弃用的“each”函数的情况下重写这个 php“if”语句?