许多条件,减少代码大小

时间:2015-07-13 07:42:47

标签: c if-statement coding-style

除了使用if branch以检查并满足所有必需条件之外,还有其他好的解决方案吗?代码看起来有点像这样写,我想减少代码大小,但是为了满足我的需要。

if(a>0 && b>0 && c>0) 
{
    if(a==d && b==e && c==f)
    {
         if(a<FIELD_HEIGHT && b<FIELD_WIDTH)
         {
             if(true) 
             {

             }
         }
    }
}

6 个答案:

答案 0 :(得分:3)

您可以使用逻辑AND运算符(&&):

if (cond1 && cond2 && cond3) {
  // action
}

相当于:

if (cond1) {
  if (cond2) {
    if (cond3) {
      // action
    }
  }
}

只要您不需要特定于任何条件的else子句,这就很有用。

条件将从左侧开始,因此如果cond1falsecond2cond3将无法获得评估。

编辑:如果你有许多条件需要为了采取行动,并且你关心代码可读性,我首先将它们分组在一个布尔变量中,即:

int isCar = has4Wheels && hasBreaks && hasEngine;
int isASportsCar = hasLargeEngine && hasLowSuspension && hasManualControls;
int isFerrari = isV12 && isRed && hasANiceLogo;

if (isCar && isASportsCar && isFerrari) {
  // action
}

示例可能很愚蠢,但你明白了。

答案 1 :(得分:1)

由于您的代码段没有任何else步骤,您可以将代码缩减为

 if (<condition1> && <condition2> && <condition3>)

等等。

答案 2 :(得分:1)

因为你没有将if,just和all条件联合起来的else子句如:

if (thisCondition && thatCondition ..) {}

答案 3 :(得分:0)

  1. 如果变量abc被声明为unsigned,则会减少if
  2. 如果不存在特定的其他块,则可以合并两个if语句
  3. 然后,您可以将代码缩减为

    unsigned a, b, c;    // if declared as unsigned or if d, e, f are known to be positive
    
    if (a == d && b == e && c == f && a < FIELD_HEIGHT && b < FIELD_WIDTH) {
        ...
    }
    

答案 4 :(得分:0)

跟进my comment here

if (   (a>0 && a<FIELD_HEIGHT && a==d)
    && (b>0 && b<FIELD_WIDTH && b==e)
    && (c>0 && c==f)
   )
{
  ...
}

并假设varibales是unsigned整数:

if (   (a && a<FIELD_HEIGHT && a==d)
    && (b && b<FIELD_WIDTH && b==e)
    && (c && c==f)
   )
{
  ...
}

答案 5 :(得分:0)

我认为这没关系:

if(a>0 && b>0 && c>0) 
{
    if(a==d && b==e && c==f)
    {
         if(a<FIELD_HEIGHT && b<FIELD_WIDTH)
         {

         }
    }
}

在你的代码中,最后一个判断:“if(true)”是多余的