C: for loop int statement inicial

¿Alguien puede explicar el siguiente error de gcc?

$ gcc -o Ctutorial/temptable.out temptable.c temptable.c: In function 'main': temptable.c:5: error: 'for' loop initial declaration used outside C99 mode 

temptable.c:

 ... /* print Fahrenheit-Celsius Table */ main() { for(int i = 0; i <= 300; i += 20) { printf("F=%d C=%d\n",i, (i-32) / 9); } } 

PD: recuerdo vagamente que int i debería declararse antes de un ciclo for . Debo decir que estoy buscando una respuesta que proporcione un contexto histórico de C estándar.

 for (int i = 0; ...) 

es una syntax que se introdujo en C99. Para usarlo debe habilitar el modo C99 pasando -std=c99 (o algún estándar posterior) a GCC. La versión C89 es:

 int i; for (i = 0; ...) 

EDITAR

Históricamente, el lenguaje C siempre forzaba a los progtwigdores a declarar todas las variables al comienzo de un bloque. Entonces algo así como:

 { printf("%d", 42); int c = 43; /* <--- compile time error */ 

debe ser reescrito como:

 { int c = 43; printf("%d", 42); 

un bloque se define como:

 block := '{' declarations statements '}' 

C99, C ++, C # y Java permiten la statement de variables en cualquier lugar de un bloque.

El verdadero motivo (adivinar) se trata de asignar estructuras internas (como el cálculo del tamaño de la stack) lo antes posible al analizar la fuente C, sin ir a otro pase de comstackción.

Antes de C99, tenía que definir las variables locales al comienzo de un bloque. C99 importó la característica C ++ que puede entremezclar definiciones de variables locales con las instrucciones y puede definir variables en las expresiones de control for y while .