-5

不存在 return 语句时 int 类型 return 语句的返回值是多少

为什么?

int func()
{
 printf("Hello");
}

int func1()
{

}

void main()
{
 int s,p;

 s=func();
 p=func1();
 printf("%d %d", s, p);
}
4

2 回答 2

6

在 C 中(这就是问题的标记方式),两者的返回值funcfunc1是未定义的。

C11 (n1570), § 6.9.1 函数定义

如果}到达终止函数的 ,并且调用者使用函数调用的值,则行为未定义。

此外,在托管环境中,main返回类型应该是int,而不是void。顺便说一句,有一个例外:在 C99 和 C11 中,如果达到}终止main(*) 的值,则返回给环境的值为 0。

(*) 如果它的返回类型与int.

于 2013-03-20T15:31:24.420 回答
0

你在评论中说:

在 func() 的情况下,我得到的返回值为 5

实际上,这一次在您的机器上似乎发生的事情是printf(即 5,打印的字符数)的返回值返回到func寄存器中。func在它自己的返回之前没有修改该寄存器,因此看到它检查同一寄存器时main的返回值似乎是什么。func

您可以通过查看反汇编的可执行代码来确认或反驳这一点func

如果这确实是发生的事情,那么它是正在使用的调用约定的细节,以及调用func后不使用寄存器的偶然情况printf。正如基里连科所说,这种行为在形式上是未定义的,您无权依赖它。

于 2013-03-20T16:29:59.530 回答