在这种情况下,您可以利用短路评估&&
,当左手操作数是false
,右侧操作数不被求值。
如果您可能想在调用之间执行其他处理a()
, b()
or c()
,以下允许:
bool foo (x_t x, y_t y, z_t z)
{
bool err = a( x );
err = err && b( y ) ;
err = err && c( z ) ;
return err;
}
而如果函数仅由调用组成a()
, b()
or c()
,那么你可以使用更简洁的:
bool foo (x_t x, y_t y, z_t z)
{
return a( x ) &&
b( y ) &&
c( z ) ;
}
[响应评论而添加]
解决 @kkrambo 关于函数返回的任何数值不传播给调用者的观点是可以解决的,但作为解决方案越来越没有吸引力:
int16_t foo (x_t x, y_t y, z_t z)
{
int16_t ret ;
bool err = (ret = a( x ));
err = err && (ret = b( y )) ;
err = err && (ret = c( z )) ;
return ret ;
}
or
int16_t foo (x_t x, y_t y, z_t z)
{
uint16_t ret ;
(ret = a( x )) &&
(ret = b( y )) &&
(ret = c( z )) ;
return ret ;
}
增加恐怖程度你甚至可以这样做:
int16_t foo (x_t x, y_t y, z_t z)
{
int16_t err ;
if( (err = a(x)) ) {}
else if( (err = b(y)) ) {}
else if( (err = c(z)) ) {}
return err ;
}
简化为以下内容err
是布尔值:
bool foo (x_t x, y_t y, z_t z)
{
bool err = true ;
if( a(x) ) {}
else if( b(y) ) {}
else if( c(z) ) {}
else { err = false }
return err ;
}