Quelqu'un peut-il élaborer sur l'erreur gcc suivante?
$ 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);
}
}
P.S: Je me souviens vaguement que int i
doit être déclaré avant une boucle for
. Je dois dire que je cherche une réponse qui donne un contexte historique de la norme C.
for (int i = 0; ...)
est une syntaxe introduite en C99. Pour l'utiliser, vous devez activer le mode C99 en passant -std=c99
(ou une norme ultérieure) à GCC. La version C89 est:
int i;
for (i = 0; ...)
ÉDITER
Historiquement, le langage C obligeait toujours les programmeurs à déclarer toutes les variables au début d'un bloc. Donc quelque chose comme:
{
printf("%d", 42);
int c = 43; /* <--- compile time error */
doit être réécrit comme:
{
int c = 43;
printf("%d", 42);
un bloc est défini comme:
block := '{' declarations statements '}'
C99, C++, C # et Java permet la déclaration de variables n'importe où dans un bloc.
La vraie raison (deviner) est d'allouer des structures internes (comme le calcul de la taille de la pile) dès que possible lors de l'analyse de la source C, sans passer par une autre passe du compilateur.
Avant C99, vous deviez définir les variables locales au début d'un bloc. C99 a importé la fonction C++ qui vous permet de mélanger les définitions de variables locales avec les instructions et vous pouvez définir des variables dans les expressions de contrôle for
et while
.