在这里,无法理解回归的本质....
#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;
}
Run Code Online (Sandbox Code Playgroud)
输出:0 1 2 3 4
有人可以解释一下吗?
您的程序有未定义的行为.它无法返回值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;
}
Run Code Online (Sandbox Code Playgroud)