Dos puntos y comas dentro de un paréntesis for-loop

Estoy personalizando un código que encontré en internet (es el recibo de tweet de adafruit). No puedo entender muchas partes del código, pero lo que más me desconcierta es el for-loop con dos puntos y comas entre paréntesis.

boolean jsonParse(int depth, byte endChar) { int c, i; boolean readName = true; for(;;) { //<--------- while(isspace(c = timedRead())); // Scan past whitespace if(c < 0) return false; // Timeout if(c == endChar) return true; // EOD if(c == '{') { // Object follows if(!jsonParse(depth + 1, '}')) return false; if(!depth) return true; // End of file if(depth == resultsDepth) { // End of object in results list 

¿Qué significa para (;;) ? (Es un progtwig arduino, así que supongo que está en C)

 for(;;) { } 

funcionalmente significa

  while (true) { } 

Probablemente romperá el ciclo / retorno del ciclo en función de alguna condición dentro del cuerpo del ciclo.

La razón for(;;) repite para siempre es porque tiene tres partes, cada una de las cuales es opcional . La primera parte inicializa el ciclo; el segundo decide si continuar o no el ciclo, y el tercero hace algo al final de cada iteración. Está completo, normalmente verías algo como esto:

 for(i = 0; i < 10; i++) 

Si faltan la primera (inicialización) o la última (final de la iteración), no se hace nada en su lugar. Si falta la parte del medio (prueba), entonces actúa como si fuera true en su lugar. Entonces for(;;) es lo mismo que for(;true;) ', que (como se muestra arriba) es lo mismo que while (true) .

El bucle for tiene 3 componentes, separados por punto y coma. El primer componente se ejecuta antes de que comience el bucle y se usa comúnmente para inicializar una variable. El segundo es una condición. La condición se verifica al comienzo de cada iteración, y si se evalúa como verdadera, se ejecuta el código en el bucle. El tercer componente se ejecuta al final del ciclo, antes de que comience otra iteración (comenzando con la verificación de estado), y se usa a menudo para incrementar una variable.

En su caso for(;;) significa que repetirá siempre porque la condición no está presente. El ciclo termina cuando el código return s o break s.

Cada cláusula de un ciclo for es opcional. Entonces, cuando se excluyen, sigue dando vueltas. for bucles comstackr en while loops.

El resultado final se convierte en una comprobación para inicializar cualquier variable, que concluye después de que no ocurre nada, ya que está vacía, una verificación de la condición booleana en la segunda cláusula, que no está presente, por lo que se inicia el bucle y una vez que el bucle toca el corchete final una comprobación para ver si hay algún código para ejecutar antes de verificar nuevamente la condición booleana.

En el código, parece que:

 while(true){ } 

Esto es lo que Wikipedia dice al respecto

Usar como bucles infinitos
Este bucle for-style de C es comúnmente la fuente de un bucle infinito ya que los pasos fundamentales de la iteración están completamente bajo el control del progtwigdor. De hecho, cuando se pretenden bucles infinitos, este tipo de for-loop se puede usar (con expresiones vacías), como por ejemplo:

for (;;)
//loop body

Este estilo se usa en lugar de infinito while(1) ciclos para evitar una advertencia de conversión de tipo en algunos comstackdores C / C ++. Algunos progtwigdores prefieren la forma más sucinta for(;;) sobre la semánticamente equivalente pero más detallada while (true) .