输出结果为12,能说说为什么吗?我把两个return都删了,为什么还可以输出?
#include
int zhouchang(int a,int b,int c)
{
if ((a + b ) |
免责声明:本内容仅代表回答会员见解不代表天盟观点,请谨慎对待。
版权声明:作者保留权利,不代表天盟立场。
|
|
|
|
一句话总结:歪打正着而已。
你这样写肯定是不对的!
如果函数声明了有返回值,那就一定要在每一个返回分支处都return相应的返回值,否则返回的值是未定义的。
这就是C标准中所谓的“未定义”行为。 返回什么都有可能。
而且这样的代码在编译时,编译器会发现在有的返回分支处你没有return返回值,会给出警告的。
至于为什么好像返回值也是正确的。 这一般与编译器的实现有关。 比如:gcc一般会用eax寄存器来返回这样的值,而这种简单的代码,gcc有可能将sum就储存在eax中,所以结果就恰好正确了。 (这也只是一种推测,具体行为是不是这样,只能看编译后的汇编代码了)
关键是:绝对不要以为这样写代码也是可以的!这样的代码就是错误的!! 只不过碰巧返回了看似正确的值。 |
|
|
|
|
这得看c的函数 是不是默认返回,例如js会默认返回undefined一样。要么编译通不过,要么就是默认。你可以这个思路入手。 |
|
|
|
|