输出结果为12,能说说为什么吗?我把两个return都删了,为什么还可以输出?return什么用?

#include <stdafx.h>
int zhouchang(int a,int b,int c)
{
 if ((a + b )<= c || (a + c )<= b || (b + c )<= a)
 {
  printf("不能构成三角形");
  return 0;
 }
 else
 {
  int sum = a + b + c;
 }
}
int main()
{
 int a, b, c;
 a = 3;
 b = 4;
 c = 5;
 printf("三角形周长为%d", zhouchang(a,b,c));
}

慕粉18341035298
浏览 1921回答 5
5回答

onemoo

一句话总结:歪打正着而已。你这样写肯定是不对的!  如果函数声明了有返回值,那就一定要在每一个返回分支处都return相应的返回值,否则返回的值是未定义的。这就是C标准中所谓的“未定义”行为。 返回什么都有可能。而且这样的代码在编译时,编译器会发现在有的返回分支处你没有return返回值,会给出警告的。至于为什么好像返回值也是正确的。  这一般与编译器的实现有关。 比如:gcc一般会用eax寄存器来返回这样的值,而这种简单的代码,gcc有可能将sum就储存在eax中,所以结果就恰好正确了。 (这也只是一种推测,具体行为是不是这样,只能看编译后的汇编代码了)关键是:绝对不要以为这样写代码也是可以的! 这样的代码就是错误的!!  只不过碰巧返回了看似正确的值。

redstonesl

这得看c的函数 是不是默认返回,例如js会默认返回undefined一样。要么编译通不过,要么就是默认。你可以这个思路入手。

木柘

我觉得应该与编译器有关。函数返回定义为int那么调用处应该会接受到一个int数据,只是不知道具体是什么了。

留得枯荷听雨声lyx

因为在你的函数里就有输出语句啊,不过return没用吧……

木柘

想问下你是怎么编译通过的?
打开App,查看更多内容
随时随地看视频慕课网APP