#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));}
5 回答
已采纳
onemoo
TA贡献883条经验 获得超454个赞
一句话总结:歪打正着而已。
你这样写肯定是不对的!
如果函数声明了有返回值,那就一定要在每一个返回分支处都return相应的返回值,否则返回的值是未定义的。
这就是C标准中所谓的“未定义”行为。 返回什么都有可能。
而且这样的代码在编译时,编译器会发现在有的返回分支处你没有return返回值,会给出警告的。
至于为什么好像返回值也是正确的。 这一般与编译器的实现有关。 比如:gcc一般会用eax寄存器来返回这样的值,而这种简单的代码,gcc有可能将sum就储存在eax中,所以结果就恰好正确了。 (这也只是一种推测,具体行为是不是这样,只能看编译后的汇编代码了)
关键是:绝对不要以为这样写代码也是可以的! 这样的代码就是错误的!! 只不过碰巧返回了看似正确的值。
- 5 回答
- 1 关注
- 1920 浏览
添加回答
举报
0/150
提交
取消