【问题标题】:Is there a default return value of C++ functions? [duplicate]C++ 函数是否有默认返回值? [复制]
【发布时间】:2014-03-06 19:43:03
【问题描述】:

我很惊讶包含以下代码行的文件被成功编译并且链接器生成了一个可执行文件。我认为除了main之外的所有函数都必须有一个有效的return语句,除非返回类型是void

int foo(){}
double bar(){}
int main(){}

我错过了什么?

【问题讨论】:

标签: c++ cygwin


【解决方案1】:

不从一个函数中返回一个表明它确实的值是未定义的行为。它编译和链接,但不要期望程序正常运行。

如果你以高警告级别编译,编译器会告诉你。

【讨论】:

    【解决方案2】:

    我认为除了main之外的所有函数都必须有一个有效的return语句,除非返回类型是void

    是的,他们必须这样做。如果他们不这样做,您将获得未定义的行为。

    我错过了什么?

    如果函数足够复杂,编译器可能很难或不可能判断所有返回路径是否都返回值;所以编译器不需要诊断错误。

    如果您启用警告,大多数编译器会在很多情况下发出警告。

    【讨论】:

    • 我发现这是一个非常好的静态分析器用例。
    • @faranwath:确实;虽然一个好的编译器应该包含这种分析,但并不总是可以静态检测。
    • 我觉得你最后的评论很有趣。愿意分享一个例子吗?我无法从脑海中想到一个合理的情况。
    • @faranwath:例如,在每个分支中带有returnswitch 语句,您(但不是编译器)可以证明该值只能是处理的情况之一。在小型嵌入式系统上,您可能不希望处理(理论上不可能的)默认情况的开销。
    • @faranwath:更抽象地说,追踪所有可能的返回路径相当于解决停机问题,众所周知,在一般情况下不可能静态解决。
    猜你喜欢
    • 2021-11-16
    • 1970-01-01
    • 1970-01-01
    • 2013-12-26
    • 2019-02-22
    • 1970-01-01
    • 2012-02-02
    • 1970-01-01
    • 2012-11-22
    相关资源
    最近更新 更多