it-swarm-pt.tech

Como faço para "quebrar" uma declaração if?

Eu tenho uma declaração if que eu quero "quebrar" de. Eu entendo que a quebra é apenas para loops. Alguém pode ajudar?

Para aqueles que exigem um exemplo do que estou tentando fazer:

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

Aninhados ifs:

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

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

Correndo o risco de ser downvoted - aconteceu comigo no passado - vou mencionar que outra opção (impopular) seria, naturalmente, o temido goto; uma declaração de quebra é apenas um goto disfarçado.

E, finalmente, vou ecoar o sentimento comum de que o seu design provavelmente poderia ser melhorado, de modo que a declaração if massiva não seja necessária, muito menos que seja revelada. Pelo menos você deve conseguir extrair alguns métodos e usar um retorno:

if (condition)
{
    ExtractedMethod1();

    if (breakOutCondition)
        return;

    ExtractedMethod2();
}
59
phoog
if (test)
{
    ...
    goto jmp;
    ...
}
jmp:

Oh por que não :)

37
Matt Phillips

Você provavelmente precisará dividir sua declaração if em partes menores. Dito isto, você pode fazer duas coisas:

  • enrole a declaração em do {} while (false) e use real break (não recomendado !!! enorme kludge !!!)

  • coloque a instrução em sua própria sub-rotina e use return Esse pode ser o primeiro passo para melhorar seu código.

20
Arkadiy

Você não pode quebrar o break de uma instrução if, a menos que você use goto.

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

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

Isso daria "var = 1" como saída

3
DipSwitch

Há sempre uma instrução gotoNAME_ , mas eu recomendaria aninhando um ifcom um inverso da condição de quebra.

2
dasblinkenlight

Você poderia usar um rótulo e um goto, mas isso é um mau truque. Você deve considerar mover algumas das coisas em sua declaração if para separar os métodos.

2
Daniel Gabriel

Os operadores || e && são de curto-circuito, portanto, se o lado esquerdo de || for avaliado como true ou o lado esquerdo de && for avaliado como falso, o lado direito não será avaliado. Isso é equivalente a uma pausa.

2
Mark Ransom

Tem um label em um ponto que você quer pular para dentro e no seu se usar goto

if(condition){
     if(jumpCondition) goto label
}
label:
2
Emmanuel N

Você pode usar goto, return, ou talvez chamar abort (), exit () etc.

1
user405725

Eu não sei suas condições de teste, mas um bom switch poderia funcionar

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