Espacios de nombres
Variantes
Acciones

Bucle for

De cppreference.com
< c‎ | language

Ejecuta un bucle.

Utilizado como un equivalente más corto del bucle while.

Contenido

[editar] Sintaxis

for ( cláusula_inicial ; expresión_condicional ; expresión_iterativa ) sentencia_del_bucle

[editar] Explicación

Se comporta de la siguiente manera:

  • cláusula_inicial puede ser una expresión o una declaración
  • Si es una expresión, se evalúa una vez, antes de la primera evaluación de expresión_condicional y su resultado es descartado.
  • (C99) Si es una declaración, se encuentra en el alcance en todo el cuerpo del bucle, incluyendo el resto de la cláusula_inicial, toda la expresión_condicional, toda la expresión_iterativa y toda la sentencia_del_bucle. Sólo se permiten las clases de almacenamiento auto y register para las variables declaradas en esta declaración.
  • La expresión_condicional se evalúa antes del cuerpo del bucle. Si el resultado de la expresión es cero, se sale inmediatamente de la sentencia de bucle.
  • La expresión_iterativa se evalúa después del cuerpo del bucle y su resultado es descartado. Después de evaluar la expresión_iterativa, el control se transfiere a la expresión_condicional.

La cláusula_inicial, expresión_condicional, y expresión_iterativa son todas opcionales:

for(;;) {
   printf("¡Bucle interminable!);
}

La sentencia_del_bucle no es opcional, pero puede ser una sentencia null:

for(int n = 0; n < 10; ++n, printf("%d\n", n))
    ; // sentencia null

Si la ejecución del bucle necesita ser terminada en algún momento, se puede usar la sentencia break en cualquier lugar dentro de la sentencia_del_bucle.

La sentencia continue usado en cualquier lugar dentro de la sentencia_del_bucle transfiere el control a la expresión_iterativa.

Un programa con un bucle interminable tiene un comportamiento indefinido si el bucle no tiene un comportamiento observable (E/S, accesos volátiles, operación atómica o de sincronización) en cualquier parte de su expresión_condicional, expresión_iterativa o sentencia_del_bucle. Esto permite a los compiladores optimizar todos los bucles no observables sin probar que terminan. Las únicas excepciones son los bucles en los que la expresión_condicional se omite o es una expresión constante; for(;;) es siempre un bucle interminable.

Como con todas las demás sentencias de selección e iteración, la sentencia for establece un alcance de bloque: cualquier identificador introducido en la cláusula_inicial, expresión_condicional, o en la expresión_iterativa se sale del alcance después de que la sentencia_del_bucle.

(desde C99)

[editar] Terminos Clave

for

[editar] Observaciones

A diferencia de C++, la sentencia de expresión usada como sentencia_del_bucle establece su propio alcance de bloque, distinto del alcance de la cláusula_inicial: :

for (int i = 0; ; ) {
    long i = 1;   // valido en C, invalido en C++
    // ...
}

Es posible entrar en el cuerpo de un bucle usando goto. En este caso, cláusula_inicial y expresión_condicional no seran ejecutadas.

[editar] Ejemplo

#include <stdio.h>
#include <stdlib.h>
enum { SIZE = 8 };
int main(void)
{
    int array[SIZE];
    for(size_t i = 0 ; i < SIZE; ++i)
        array [i] = rand() % 2;
    printf("¡El arreglo esta lleno!\n");
    for (size_t i = 0; i < SIZE; ++i)
        printf("%d ", array[i]);
    printf("\n");
}

Posible salida:

¡El arreglo esta lleno!
1 0 1 1 1 1 0 0

[editar] Referencias

  • Standard C11 (ISO/IEC 9899:2011):
  • 6.8.5.3 The for statement (p: 151)
  • Standard C99 (ISO/IEC 9899:1999):
  • 6.8.5.3 The for statement (p: 136)
  • Standard C89/C90 (ISO/IEC 9899:1990):
  • 3.6.5.3 The for statement

[editar] Véase también

Documentación de C++ para bucle for