当没有返回语句时,返回int类型返回语句的值

时间:2013-03-20 15:29:00

标签: c function return

当没有返回语句时,int类型返回语句的返回值是什么

为什么?

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

int func1()
{

}

void main()
{
 int s,p;

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

2 个答案:

答案 0 :(得分:6)

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

  

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后不使用寄存器的偶然事件。正如基里连科所说,这种行为是正式未定义的,你无权依赖它。