Domanda

Ho una domanda e si prega di aiuto me.i aver letto sulla pagina web somthing circa fare while, diverso è che, nel mentre c'è scritto 0, non condizione booleana

do{
   // do some instruction
}while(condition );

è chiaramente comprensibile, ma questo

 do
  {
    //again some instruction
  }while(0);
?

Non riesco a immaginare che cosa fa è equivalenza a questo:?? Fare qualcosa mentre (false) o forse si tratta ciclo infinito please help me

È stato utile?

Soluzione

Si fa qualcosa solo una volta. E ' ampiamente utilizzato nelle macro alle dichiarazioni di gruppo e rendere l'utilizzo più naturale (cioè richiedono fine e virgola).

Ogni compilatore degno dovrebbe ignorare il do .. mentre del tutto e solo eseguire le istruzioni allegate.

Altri suggerimenti

Anche se questo "loop" viene eseguito solo una volta, si può usare in questo modo:

do
{
  // declare some local variables only visible here
  // do something

  if(TestSomeConditions())
      break;

  // do something more
  // destructors of local variables run here automatically
}while(0);

IMHO, nella maggior parte dei casi è meglio di riscrivere questo in maniera più strutturata, sia in questo modo

  // do something
  if(!TestSomeConditions())
  {
      // do something more
  }

oppure introducendo una funzione separata, riflettendo la portata originale:

  void MyFunction()
  {
      // declare some local variables only visible here
      // do something

      if(TestSomeConditions())
          return;

      // do something more
  }

Si tratterà 0 per falso e un loop volta eseguirà e rompere non appena raggiunto a while (g ++ compilatore testato).

Il ciclo Do While esegue tutte le istruzioni del corpo del ciclo prima e quindi verifica per la condizione. Quindi, questo ciclo solo esegue le istruzioni del corpo del ciclo, una volta.

do
{
    //my instructions
}while(0)

è equivalente alla scrittura

{
    //my instructions
}

I compilatori moderni sono abbastanza intelligente per ottimizzare queste cose!

Tecnicamente parlando, lo rende eseguito una volta, in quanto i controlli (e non supera il controllo) dopo che viene eseguito una volta.

Oltre a questo, è utilizzato nelle macro. Ad esempio:

#define blah(a) \
        something(1); \
        something(2)

if(a)
    blah(4);
else
    blah(19);

porterebbe a questo:

...
if(a)
    something(1); something(2);
else
    something(1); something(2);

che non è sintassi valida, come il resto non fa parte della istruzione if più. Che cosa si può fare è:

 define blah(a) \
    do {
       something(1); something(2);
    } while(0)

    ...

, che si tradurrebbe in una singola istruzione nel blocco if:

if(a)
    do { something(1); something(2); } while(0);
else
    ...
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top