不存在 return 语句时 int 类型 return 语句的返回值是多少
为什么?
int func()
{
printf("Hello");
}
int func1()
{
}
void main()
{
int s,p;
s=func();
p=func1();
printf("%d %d", s, p);
}
在 C 中(这就是问题的标记方式),两者的返回值func
和func1
是未定义的。
C11 (n1570), § 6.9.1 函数定义
如果
}
到达终止函数的 ,并且调用者使用函数调用的值,则行为未定义。
此外,在托管环境中,main
返回类型应该是int
,而不是void
。顺便说一句,有一个例外:在 C99 和 C11 中,如果达到}
终止main
(*) 的值,则返回给环境的值为 0。
(*) 如果它的返回类型与int
.
你在评论中说:
在 func() 的情况下,我得到的返回值为 5
实际上,这一次在您的机器上似乎发生的事情是printf
(即 5,打印的字符数)的返回值返回到func
寄存器中。func
在它自己的返回之前没有修改该寄存器,因此看到它检查同一寄存器时main
的返回值似乎是什么。func
您可以通过查看反汇编的可执行代码来确认或反驳这一点func
。
如果这确实是发生的事情,那么它是正在使用的调用约定的细节,以及调用func
后不使用寄存器的偶然情况printf
。正如基里连科所说,这种行为在形式上是未定义的,您无权依赖它。