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