2009-06-11 18 views
17

Lo he visto en ocasiones en libros que he leído. Pero no he encontrado ninguna explicación.¿Qué significa "para (;;)" en C#?

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

¿Es como "while (true)"? Básicamente, un ciclo sin fin para las encuestas o algo así. Básicamente algo que harías hasta que intencionalmente rompas el ciclo?

+8

¡7 respuestas en el primer minuto después de publicar la pregunta! – SPWorley

+2

Funcionalmente es lo mismo. Prefiero while (true) porque los bucles realmente tienen esa funcionalidad adicional para iterar, más allá de simplemente probar el condicional. Algunas personas prefieren (;;) porque lo leen para siempre. – justinhj

+1

En C# los 4 caracteres en "(;;)" en realidad se convierten en "siempre" - así para siempre :) – Hugoware

Respuesta

48

¿Es como "while (true)"?

Sí. Se repite para siempre.


También tenga en cuenta el comentario de Andrew Coleson:

lenguajes como C no tienen incorporado en los primitivos booleanos, por lo que algunas personas prefieren para (;;) sobre while (1)

+1

No entiendo por qué esto obtuvo 22 votos, con otras respuestas similares. –

+4

Tenía razón, y fue primero. Sucede. No gané ningún representante por eso, ya tenía un límite hoy. –

+0

¡Es una increíble cantidad de votos! – RichardOD

9

Loop forever.

17

Estás en la correcta. Esta es una expresión común de C# para un ciclo sin fin.

12

Sí, es un bucle infinito.

8

Sí, es un ciclo infinito. La misma idea/efecto que haciendo while(true) { ... }

20

Sí.

En una porque si se proporciona nada:

  • La inicialización no hace nada.
  • La condición se cumple siempre
  • La declaración no hace nada recuento

Es equivalente a while (true).

+6

¿O es que la condición nunca es falsa? –

+0

@theOtherScott, creo que tienes razón. –

8

Inifinite bucle como decir

while (0<1) 
+0

"while (1)" no se compilará en C#. mientras espera un bool, no hay un elenco implícito de int a bool. –

+0

tiene razón, tendría que realizarlo usted mismo, pero definitivamente funciona en C++, pero lo cambié por un mejor ejemplo – TStamper

+0

¿Qué pasaría si tuviera ≥ 2 para empezar? Un mejor ejemplo sería algo así como "while (3 <4)". – ShreevatsaR

10

Sí, es un bucle sin fin, al igual que while (true).

Es la convención ligeramente preferida, probablemente porque es más corta. No hay diferencia de eficiencia en absoluto.

6

Para ser precisos, cualquier bucle for sin nada entre los puntos y comas se repetirá para siempre (hasta que se termine por algún otro medio), porque no tiene invariante definido.

13

Correcto.Tenga en cuenta que las llaves de un bucle for contienen tres partes:

  1. código de inicialización
  2. Una condición para continuar el bucle
  3. Algo que se ejecuta para cada repetición del bucle

Con for(;;), toda de estos están vacíos, por lo que no se hace nada para inicializar el bucle, no hay ninguna condición para mantenerlo en ejecución (es decir, se ejecutará indefinidamente) y no se ejecuta nada para cada iteración excepto el contenido del bucle.

11

Si no recuerdo mal su uso sobre "while (true)", es parece más a "para (;;) // nunca"

+2

+1 por el juego de palabras. –

4

que no tiene una condición final, por lo que será un bucle infinito hasta que encuentre un descanso, como ya has adivinado.

9

Tome un vistazo a un bucle.

for (initialization ; condition ; increment ) 

1) inicialización - establecer una variable de contador aquí
2) condición - mantener un bucle hasta que la variable de contador cumple la condición
3) incremento - incrementar el contador

Si no hay ninguna condición, un ciclo continuará por siempre. Si lo hace, entonces no hay necesidad de un contador. Por lo tanto,

for(;;) 
1

Se utiliza a menudo en la programación integrada.

interrupciones -configurar y temporizadores. -entonces bucle para siempre.

Cuando se produce una interrupción o un temporizador que será manejado.

4

Podría añadir también que se parezca a 2 Smiley Faces un guiño a usted

para (;;)

tal vez por eso algunas personas como para usarlo.

+0

Gracias, prefiero tu respuesta:] –

4

Sí, se realiza un bucle para siempre. Pero la razón por la que debe utilizar

for(;;) 

en lugar de

while(true) 

es que

while(true) 

le dará una advertencia del compilador "constanteexpresión condicional", mientras que el de -loop no lo hace. Al menos obtendrá una advertencia de compilación de este tipo en el nivel de advertencia más alto.