Как я могу "вырваться" из инструкции 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;
}
:
}