在这里,无法理解回归的本质....
#include <stdio.h>
#include <stdlib.h>
int fun1(int i)
{
return ;
}
int main()
{
int i = 0;
for (i = 0; i<5; i++)
{
printf("%d\n",fun1(i));
}
return 0;
}
输出: 0 1 2 3 4
有人可以解释???
答案 0 :(得分:8)
您的程序有未定义的行为。它无法返回fun1
的值。什么事情都可能发生。
它编译的事实意味着您的编译器遵循旧标准。例如C89说:
3.6.6.4退货声明
...
如果执行了没有表达式的return语句,并且调用者使用了函数调用的值,则行为未定义。
另一方面,C99说:
6.8.6.4退货声明
...
没有表达式的return语句只能出现在 返回类型为void的函数。
因此,如果您的编译器严格遵守C99或更高版本,那么您的代码无效。
关于程序行为的原因,这是一个毫无意义的推理,因为它的行为是未定义的。也许这个编译器的ABI恰好期望将返回值放在一个寄存器中,当调用i
时,该寄存器还包含调用者的循环变量fun1
的值。无论如何,你的程序可以输出任何东西。
由于fun1
的返回类型不是void
,因此您应该使用具有表达式的return
语句的形式。例如:
int fun1(int i)
{
return i;
}