c++ - kpop - tag de las 20 preguntas
¿Qué significa "para(;;)"? (5)
En C / C ++, ¿qué significa lo siguiente?
for(;;){
...
}
Bucle hasta que se ejecute alguna instrucción de break
, exit
, throw
, etc. dentro del bucle. Básicamente, puedes pensar en un bucle for
que consiste en:
for (setup; test; advance)
...
Si la "prueba" está vacía, se considera que es true
y el bucle se sigue ejecutando. Vaciar "configuración" y "avanzar" simplemente no hacer nada.
Bucle infinito que continúa hasta que haya una instrucción break (), exit () o goto.
En C y C ++ (y también en algunos otros lenguajes), el bucle for
tiene tres secciones:
- una sección de pre-bucle, que se ejecuta antes de que comience el bucle;
- una sección de condición de iteración que, si bien es verdadera, ejecutará el cuerpo del bucle; y
- una sección posterior a la iteración que se ejecuta después de cada iteración del cuerpo del bucle.
Por ejemplo:
for (i = 1, accum = 0; i <= 10; i++)
accum += i;
sumará los números del 1 al 10 inclusive.
Es aproximadamente equivalente a lo siguiente:
i = 1;
accum = 0;
while (i <= 10) {
accum += i;
i++;
}
Sin embargo, nada requiere que las secciones en una declaración for
contengan nada y, si falta la condición de iteración, se asume que es verdadera.
Así que el bucle for(;;)
básicamente significa:
- no haga ninguna configuración de bucle;
- bucle para siempre (se rompe, regresa y demás a pesar de ello); y
- no hacer ningún procesamiento posterior a la iteración.
En otras palabras, es un bucle infinito.
Es un bucle infinito, equivalente a while(true)
. Cuando no se proporciona una condición de terminación, la condición por defecto es true
.
Incluso si esta respuesta sugiere que ambas construcciones son equivalentes, hay una diferencia sutil entre ambos for(;;)
y while(1)
(que ambos crean bucles infinitos) en el lenguaje C (y posiblemente dependiente del compilador).
Algunos compiladores (por ejemplo, Windriver DIABData) se quejan de que "la condición es siempre cierta" cuando se usa while(1)
.
Cambiar a for(;;)
permite deshacerse de la advertencia, probablemente porque la última expresión es semánticamente más fuerte para crear un bucle infinito a propósito, y no existe una condición "siempre verdadera" (más es más breve escribir).