int fun()
{
printf("\ncrap");
}
void main()
{
printf("\n return value of fun %d", fun());
}
请您解释一下堆栈如何为返回值分配内存以及堆栈在这里如何工作。
fun
触发未定义的行为。
请始终在启用所有编译器警告的情况下进行编译。这应该给你一个警告,告诉你你正在犯同样的错误。
您的
main
也会触发未定义的行为,因为 C++ 标准要求只有一个名为 main
的函数,并且它返回 int
。但是,作为特殊情况,您可以在(已更正的)return
函数中省略 main
语句。
正如您所认为的,“堆栈”不是 C++ 语言的一部分。但这无关紧要;标准规定返回的对象是在调用者的范围内构造的,这就是您需要知道的全部内容。
(实际上,未返回的
int
可能最终会像 int
类型的未初始化变量一样,但标准表示函数调用已经触发了未定义的行为,而不仅仅是稍后的读取访问。)
这是未定义的行为。任何事情都可能发生。
由于它依赖于架构,因此没有通用的东西。
但是,可以承认,最后计算的值,或者最后调用的函数的返回值可以被返回。但最终它是未定义的行为。如果你想依赖它...
另请注意,
int main()
有一种特殊情况。 (顺便说一句:void main()
不是标准的。)如果没有返回语句,则返回0
。