有一条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,b)是假(即0),那么后面的funcB就根本不会执行。
因为是&&运算,那么运算符前面的函数返回值如果是0(假),则后面函数无论返回值是什么,整个if的条件表达式都会取值为假,因此程序在执行中遇到这种情况,就会不执行funcB的函数调用,直接执行if后面的语句了.所以这里的异常就是有时funcB不会被调用.
如果想避免,可以考虑: 至少所有函数都会执行
int d,e;