【问题标题】:Return value for a int type return statement when there is no return statement present [closed]不存在返回语句时 int 类型返回语句的返回值[关闭]
【发布时间】:2013-03-20 15:29:00
【问题描述】:

不存在return语句时,int类型return语句的返回值是多少

为什么?

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

int func1()
{

}

void main()
{
 int s,p;

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

【问题讨论】:

  • 标题应该简短,问题应该在问题部分

标签: c function return


【解决方案1】:

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

C11 (n1570), § 6.9.1 函数定义

如果到达终止函数的},并且调用者使用了函数调用的值,则行为未定义。

此外,在托管环境中,main 返回类型应为int,而不是void。顺便说一句,有一个例外:在C99和C11中,如果到达终止main(*)的},返回给环境的值为0。

(*) 如果它的返回类型与int兼容。

【讨论】:

  • 但在 func() 的情况下,我得到的返回值为 5
  • @Supmaj 了解未定义的行为
【解决方案2】:

你在评论中说:

在 func() 的情况下,我得到的返回值为 5

实际上,这一次在您的机器上似乎发生了,printf 的返回值(即 5,打印的字符数)在寄存器中返回到 funcfunc 在自己返回之前没有修改该寄存器,因此main 在检查同一个寄存器时会看到func 的返回值。

您可以通过查看func 的反汇编可执行代码来确认或反驳这一点。

如果确实发生了这种情况,那么它是正在使用的调用约定的细节,以及func 在调用printf 后没有使用寄存器的巧合。正如基里连科所说,这种行为在形式上是未定义的,您无权依赖它。

【讨论】:

  • 那么当我在函数中包含 return 语句时,它的行为方式不同,返回 return 语句中提到的值,而不是 printf 返回的值为什么这么大的区别?
猜你喜欢
  • 2017-07-27
  • 1970-01-01
  • 1970-01-01
  • 2020-12-08
  • 2012-04-02
  • 1970-01-01
  • 2013-06-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多