Как я могу "вырваться" из инструкции if?

У меня есть оператор if, который я хочу "сломать". Я понимаю, что перерыв - это действительно только петли. Может ли кто-нибудь помочь?

Для тех, кому нужен пример того, что я пытаюсь сделать:

if( color == red )
{
...
if( car == hyundai ) break;
...
}

Ответ 1

Вложенные ifs:

if (condition)
{
    // half-massive amount of code here

    if (!breakOutCondition)
    {
        //half-massive amount of code here
    }
}

Рискуя быть замедленным - это случилось со мной в прошлом - я упомянул, что другой (непопулярный) вариант, конечно, будет страшным goto; выражение о перерыве просто переодетые.

И, наконец, я повторю общее мнение о том, что ваш дизайн, вероятно, может быть улучшен, чтобы массовый оператор if не был необходим, не говоря уже о его выходе из него. По крайней мере, вы должны иметь возможность извлечь несколько методов и использовать возврат:

if (condition)
{
    ExtractedMethod1();

    if (breakOutCondition)
        return;

    ExtractedMethod2();
}

Ответ 2

if (test)
{
    ...
    goto jmp;
    ...
}
jmp:

О, почему бы и нет:)

Ответ 3

Вероятно, вам нужно разбить оператор if на более мелкие части. При этом вы можете сделать две вещи:

  • заверните инструкцию в do {} while (false) и используйте real break (не рекомендуется!!! огромный kludge!!!)

  • поместить инструкцию в свою собственную подпрограмму и использовать return Это может быть первым шагом к улучшению вашего кода.

Ответ 4

Вы не можете сломать break из оператора if, если вы не используете goto.

if (true)
{
      int var = 0;
      var++;
      if (var == 1)
          goto finished;
      var++;
}

finished:
printf("var = %d\n", var);

Это даст "var = 1" как вывод

Ответ 5

Всегда существует goto statement, но я бы рекомендовал вставить if с обратным условием нарушения.

Ответ 6

Вы можете использовать ярлык и goto, но это плохой взлом. Вы должны рассмотреть возможность перемещения некоторых элементов в вашем выражении if для разделения методов.

Ответ 7

Операторы || и && являются короткими замыканиями, поэтому, если левая сторона || оценивается как true или левая сторона && имеет значение false, правая сторона не будет оцениваться. Это эквивалентно перерыву.

Ответ 8

У вас есть ярлык в точке, в которую вы хотите перейти, и в стороне, если вы используете перейти

if(condition){
     if(jumpCondition) goto label
}
label:

Ответ 9

Вы можете использовать goto, return или, возможно, позвонить abort (), exit () и т.д.

Ответ 10

Я не знаю ваших тестовых условий, но хороший старый switch мог работать

switch(colour)
{
  case red:
  {
    switch(car)
    { 
      case hyundai: 
      {
        break;
      }
      :
    }
    break;
  }
  :
}