【问题标题】: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 相关。如果有人能指出我在这些文件中的任何一份中的正确位置(我不在乎),我将不胜感激。

【问题讨论】:

    标签: c++ c language-lawyer


    【解决方案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如果到达终止函数的},并且调用者使用了函数调用的值,则行为未定义。

      【讨论】:

        猜你喜欢
        • 2013-05-29
        • 2020-06-20
        • 2019-09-07
        • 2016-12-31
        • 2019-10-12
        • 1970-01-01
        • 2011-02-11
        • 1970-01-01
        • 2021-08-18
        相关资源
        最近更新 更多