一个关于C语言中if判定条件的疑问

有一条if语句的判定条件如下:
if (funcA(a, b) && funcB(b, c))
{
do_something();
}
其中参数b是funcA的输出参数,是funcB的输入参数,这样的语句是否可能出现异常?

你的b是什么类型,如果是int,就不存在输出输入一说,你在funcA中对b的改变根本没法影响到实参,会导致funcB(b,c)中的b还是初始值,比如说

int x=0;
if (funcA(a, x) && funcB(x, c))  //这里无论你funcA中对后面那个参数做了任何处理,funcB(x的这个x始终为0

另外就是if中的&&和||有短路一说,也就是说假定上面的funcA(a,b)是假(即0),那么后面的funcB就根本不会执行。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-04-04

因为是&&运算,那么运算符前面的函数返回值如果是0(假),则后面函数无论返回值是什么,整个if的条件表达式都会取值为假,因此程序在执行中遇到这种情况,就会不执行funcB的函数调用,直接执行if后面的语句了.所以这里的异常就是有时funcB不会被调用.

如果想避免,可以考虑: 至少所有函数都会执行

int d,e;
d=funcA(a,b); e=funcB(b,c); if ( d && e ) { do_something(); }

第2个回答  2019-04-04
你好,这样不会有问题的哦。
因为代码都是从上往下执行的。
先执行与左边的,后执行与右边的。
如果&&的左边条件为真,执行右边的,
如果条件为假,则不执行右边的。
第3个回答  2019-04-04
这么写没有问题! 不太清楚你想问的异常是指什么?
相似回答