tag preguntas las kpop disney canciones c++ c syntax for-loop

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).