2011-02-04 13 views
10

In C/C++, che cosa significa?Cosa significa "for (;;)"?

for(;;){ 
    ... 
} 

Purtroppo non riesco a Google che e ottenere risultati significativi.

+6

Il ciclo per sempre. – Swiss

+0

Vedere anche http://stackoverflow.com/questions/4031636/questo-è-il-per-sintassi-in-questo-secondo/4031654#4031654 e http://stackoverflow.com/questions/2737550/what-does -for-mean-in-perl/2737623 # 2737623 - Non li ho contati come doppi perché sono PHP/Perl, ma sarei sorpreso se non fosse stato chiesto prima.Tuttavia, dato che non riesco a trovarne uno C, per ora sono al sicuro :-) – paxdiablo

+0

Non pensavo che sarei stato il primo a chiedere, ma ho provato a cercare prima di chiederlo. Non ci sono parole chiave da cercare, e lo ammetto, ero un po 'pigro. – sas4740

risposta

19

È un ciclo infinito, equivalente a while(true). Se non viene fornita alcuna condizione di terminazione, la condizione predefinita è true.

+6

Il motivo per cui si dovrebbe scrivere 'for (;;)' invece di 'while (true)' è perché alcuni compilatori emetteranno un avviso per l'espressione booleana costante in 'while (true)'. Ad esempio, Visual C++ mi dà un "avviso C4127: l'espressione condizionale è costante" con 'while (true)'. –

+3

Ma è esattamente lo stesso in termini di funzionalità. –

+1

@In silico: Sono anche quattro caratteri più brevi, se ti piace l'intera cosa del golf. –

5

Ciclo fino a quando alcune break, exit, throw ecc. Istruzioni all'interno del ciclo vengono eseguite. In sostanza, si può pensare di un ciclo for come composto da:

for (setup; test; advance) 
    ... 

Se il "test" è vuota è considerata true, e il ciclo continua a funzionare. "Setup" e "advance" vuoti semplicemente non fanno nulla.

5

in C e C++ (e poche altre lingue altrettanto bene), il ciclo for ha tre sezioni:

  • una sezione di pre-loop, che esegue prima dell'inizio del ciclo;
  • una sezione di condizione di iterazione che, se è vera, eseguirà il corpo del loop; e
  • una sezione di post-iterazione che viene eseguita dopo ogni iterazione del corpo del loop.

Ad esempio:

for (i = 1, accum = 0; i <= 10; i++) 
    accum += i; 

si sommano i numeri da 1 a 10 compreso.

E 'grosso modo equivalente al seguente:

i = 1; 
accum = 0; 
while (i <= 10) { 
    accum += i; 
    i++; 
} 

Tuttavia, nulla impone che le sezioni in un comunicato for realtà contengono nulla e, se la condizione di iterazione non è presente, si presume per essere vero.

Così il ciclo for(;;) fondamentalmente solo significa:

  • non fare alcuna configurazione ad anello;
  • ciclo per sempre (interruzioni, resi e così via in deroga); e
  • non eseguire alcuna elaborazione di post-iterazione.

In altre parole, è un ciclo infinito.

3

Ciclo infinito che continua fino a quando c'è un'istruzione break(), exit() o goto.