返回 int 但未显式返回任何内容的函数的返回值是多少。例如

问题描述 投票:0回答:3
int fun()
{
 printf("\ncrap");
}


void main()
{
  printf("\n return value of fun %d", fun());
}

请您解释一下堆栈如何为返回值分配内存以及堆栈在这里如何工作。

c++ stack stack-trace
3个回答
3
投票

fun
触发未定义的行为

始终在启用所有编译器警告的情况下进行编译。这应该给你一个警告,告诉你你正在犯同样的错误。

您的

main
也会触发未定义的行为,因为 C++ 标准要求只有一个名为
main
的函数,并且它返回
int
。但是,作为特殊情况,您可以在(已更正的)
return
函数中省略
main
语句。

正如您所认为的,“堆栈”不是 C++ 语言的一部分。但这无关紧要;标准规定返回的对象是在调用者的范围内构造的,这就是您需要知道的全部内容。

(实际上,未返回的

int
可能最终会像
int
类型的未初始化变量一样,但标准表示函数调用已经触发了未定义的行为,而不仅仅是稍后的读取访问。)


2
投票

这是未定义的行为。任何事情都可能发生。


2
投票

由于它依赖于架构,因此没有通用的东西。

但是,可以承认,最后计算的值,或者最后调用的函数的返回值可以被返回。但最终它是未定义的行为。如果你想依赖它...

另请注意,

int main()
有一种特殊情况。 (顺便说一句:
void main()
不是标准的。)如果没有返回语句,则返回
0

© www.soinside.com 2019 - 2024. All rights reserved.