2009-06-11 18 views
17

L'ho visto occasionalmente nei libri che ho letto. Ma non ho trovato alcuna spiegazione.Cosa fa "for (;;)" in C#?

for (;;) 
{ 
    // Do some stuff. 
} 

È un po 'come "while (true)"? Fondamentalmente un ciclo infinito per sondaggi o qualcosa del genere? Fondamentalmente qualcosa che faresti finché non interromperai il ciclo intenzionalmente?

+8

7 risposte nel primo minuto dopo aver postato la domanda! – SPWorley

+2

Funzionalmente è lo stesso. Preferisco mentre (true) perché i loop hanno davvero quella funzionalità extra per l'iterazione, oltre al semplice test del condizionale. Alcune persone preferiscono (;;) perché lo leggono per sempre. – justinhj

+1

In C# i 4 caratteri in "(;;)" in realtà convertono in "mai" - quindi per sempre :) – Hugoware

risposta

48

È un po 'come "while (true)"?

Sì. Si avvicina per sempre.


notare anche il commento di Andrew Coleson:

linguaggi come C non sono dotati di primitive booleane, per cui alcune persone preferiscono per (;;) sopra mentre (1)

+1

Non capisco perché questo ha ottenuto 22 voti, con altre risposte simili. –

+4

Aveva ragione ed era il primo. Succede. Non ho guadagnato alcun rappresentante per questo - era già stato chiuso oggi. –

+0

È un numero incredibile di voti! – RichardOD

9

Loop per sempre.

17

Sei corretto. Questo è un idioma C# comune per un ciclo infinito.

12

Sì, è un ciclo infinito.

8

Sì, è un ciclo infinito. Stessa idea/effetto di while(true) { ... }

20

Sì.

In una per se nulla è previsto:

  • L'inizializzazione non fa nulla.
  • La condizione è sempre vera
  • La dichiarazione conteggio non fa nulla

È equivalente a while (true).

+6

Oppure la condizione non è mai falsa? –

+0

@theOtherScott, penso che tu abbia ragione. –

8

Inifinite ciclo come dire

while (0<1) 
+0

"while (1)" non verrà compilato in C#. mentre si aspetta un bool, non c'è cast implicito da int a bool. –

+0

hai ragione, dovresti eseguirlo da solo, ma funziona sicuramente in C++, ma l'ho modificato per un esempio migliore – TStamper

+0

E se fossi ≥ 2 per iniziare? Un esempio migliore potrebbe essere qualcosa come "while (3 <4)". – ShreevatsaR

10

Sì, è un ciclo infinito, proprio come while (true).

È la convenzione leggermente preferita, probabilmente perché è più breve. Non c'è alcuna differenza di efficienza.

6

Per essere precisi, qualsiasi ciclo for senza alcun punto tra il punto e virgola verrà interrotto per sempre (finché non viene terminato con altri mezzi), perché non ha un invariante definito.

13

Corretto.Notare che le coppie di un ciclo for contengono tre parti:

  1. codice di inizializzazione
  2. condizione per continuare il ciclo
  3. Qualcosa che viene eseguito per ogni iterazione del ciclo

Con for(;;), tutti di questi sono vuoti, quindi non c'è nulla da fare per inizializzare il ciclo, non c'è nessuna condizione per mantenerlo in esecuzione (cioè verrà eseguito indefinitamente) e nulla che venga eseguito per ogni iterazione tranne il contenuto del ciclo.

11

Se ricordo bene il suo uso over "while (true)", è più simile a "for (;;) // mai"

+2

+1 per il gioco di parole. –

4

non ha una condizione di fine, quindi esegue un loop infinito finché non trova una pausa, come hai già intuito.

9

Dai un'occhiata a un ciclo for.

for (initialization ; condition ; increment ) 

1) inizializzazione - impostare una variabile contatore qui
2) condizione - mantenere ciclo fino alla variabile contatore soddisfa la condizione
3) incremento - incrementare il contatore

Se non ci sono condizioni, un ciclo andrà avanti all'infinito. Se lo fa, non c'è bisogno di un contatore. Pertanto

for(;;) 
1

Spesso utilizzato nella programmazione integrata.

interrupt e timer di impostazione. -questo ciclo per sempre.

Quando si verifica un interrupt o un timer che verrà gestito.

4

potrei anche aggiungere che assomiglia 2 Smiley Faces strizzando l'occhio a voi

per (;;)

forse è per questo che alcune persone piace usarlo.

+0

Grazie, preferisco la tua risposta:] –

4

Sì, scorre per sempre. Ma il motivo per cui si dovrebbe usare

for(;;) 

invece di

while(true) 

è che

while(true) 

vi darà un avviso del compilatore "espressione condizionale costante", mentre il per -loop non lo fa. Almeno riceverai un avviso del compilatore simile nel livello di avviso più alto.