J'ai reçu le message d'erreur suivant lors de la compilation du code C:
error: 'for' loop initial declarations are only allowed in C99 mode
note: use option -std=c99 or -std=gnu99 to compile your code
Qu'est-ce que ça veut dire?
Comment le réparer?
Vous avez fait ceci:
for (int i=0;i<10;i++) {
Et vous devez le changer en ceci:
int i;
for (i=0;i<10;i++) {
Ou, comme le dit l'erreur,
utilisez l'option -std = c99 ou -std = gnu99 pour compiler votre code.
Mise à jour copié à partir de la réponse de Ryan Fox :
gcc -std=c99 foo.c -o foo
Ou, si vous utilisez un makefile standard, ajoutez-le à la variable CFLAGS.
Vous aurez toujours besoin de C99 si vous voulez mélanger des instructions et des déclarations de variables. Comme d'autres réponses et le message d'erreur lui-même le disent, ajoutez -std=c99
à la ligne de commande lorsque vous compilez pour activer les fonctionnalités C99 [1].
Mais vous avez toujours été autorisé à écrire une instruction composée (un "bloc" , IOW, mais la norme n'utilise jamais ce mot!) À la place d'un déclaration unique.
#include<stdio.h>
int main() {
int i = 5;
{ /* new block, new declarations. */
int i;
for (i=0;i<10;i++){
}
}
printf("%d\n", i); /* prints "5\n" */
}
C'est légal dans K&R, C90 (aka C89, c'est la même chose), et C99.
L'activation du mode C99 vous donne beaucoup de trucs sympas , mais cela désactive également d'autres trucs sympas que gcc autorise par défaut, comme les structures anonymes et les unions au sein des structures et des unions.
-std=gnu99
active probablement "tous les goodies", mais je vous préviens d'éviter de le faire. Cela rendra la tâche inutile si vous (ou d'autres) souhaitez porter le code. J'aurais probablement une version Windows de mon projet pour animaux de compagnie, portée gratuitement par quelqu'un, si je n'avais pas fait cela. Cela vous lie gcc. Tu ne veux pas être attaché. C'est tout le point sanglant des normes.Les autres réponses vous donnent un moyen de contourner le mode par défaut de GCC. Si vous souhaitez utiliser C99, (que je recommande en général), vous devez ajouter cet indicateur de compilation:
gcc -std=c99 foo.c -o foo
Ou, si vous utilisez un makefile standard, ajoutez-le à la variable CFLAGS.
Cela signifie que vous ne pouvez pas déclarer de variables dans l'instruction for
.
Tu devrais faire:
int i ;
for( i = 0 ; i < len ; i++ )
Ce que tu fais probablement
for( int i = 0 ; i < len ; i++ )