gpt4 book ai didi

c++ - 当调用带有警告 "control reaches end of non-void function"的函数时,会发生什么(实际上)?

转载 作者:IT老高 更新时间:2023-10-28 23:10:37 26 4
gpt4 key购买 nike

我知道这条消息的含义,我只是想知道为什么它不是错误消息,而只是警告?

在这种情况下会发生什么?例如,假设我有一个函数

int f()
{
}

当我调用它时会发生什么?
在这种情况下,编译器是否添加了“未初始化”int的返回?
或者缺少返回可能会导致堆栈损坏?
或者它(绝对)未定义的行为

用 gcc 4.1.2 和 4.4.3 测试


编辑:阅读答案我明白一件事,阅读评论 - 另一件事..

好的,让我们总结一下:这是未定义的行为。那么,这意味着 可能 导致堆栈损坏,对吗? (这甚至意味着,我的电脑可能开始通过麦克风插孔向我扔烂番茄,尖叫着——“你做了什么???”)。

但如果是这样,那么为什么这里的最高答案说,堆栈损坏不会发生,同时行为是未定义的?

关于未定义?尝试使用“未返回值”的调用者,或者只是函数的结尾未定义,如果它必须返回值,但它没有?

或者它不是未定义的行为,只有尝试使用该值的用户(未返回,d'oh!)将“接收”未定义的?换句话说 - 只是一些垃圾值,不会发生更多的事情?

最佳答案

答:不,缺少返回不会导致堆栈损坏

答:是的,如果调用者试图读取和/或使用(未定义!)返回值,行为将是“未定义的”。

PS:

这是对 C++ 的引用:

C++03 §6.6.3/2:

Flowing off the end of a function is equivalent to a return with no value; this results in undefined behavior in a value-returning function.

关于c++ - 当调用带有警告 "control reaches end of non-void function"的函数时,会发生什么(实际上)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12376461/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com