Comment puis-je corriger l'erreur GCC « Déclaration initiale de la boucle for utilisée en dehors du mode C99 » ?
Question
j'essaie de résoudre le problème 3n+1 et j'ai un for
boucle qui ressemble à ceci :
for(int i = low; i <= high; ++i)
{
res = runalg(i);
if (res > highestres)
{
highestres = res;
}
}
Malheureusement, j'obtiens cette erreur lorsque j'essaie de compiler avec GCC :
3np1.c:15 :erreur:Déclaration initiale de "pour" Loop utilisée en dehors du mode C99
Je ne sais pas ce qu'est le mode C99.Des idées?
La solution
j'essaierais de déclarer i
en dehors de la boucle !
Bonne chance pour résoudre 3n+1 :-)
Voici un exemple :
#include <stdio.h>
int main() {
int i;
/* for loop execution */
for (i = 10; i < 20; i++) {
printf("i: %d\n", i);
}
return 0;
}
En savoir plus sur les boucles for en C ici.
Autres conseils
Il existe un commutateur de compilateur qui permet Mode C99, qui permet entre autres de déclarer une variable à l'intérieur de la boucle for.Pour l'activer, utilisez le commutateur du compilateur -std=c99
Ou comme le dit @OysterD, déclarez la variable en dehors de la boucle.
Pour passer à C99 mode en Blocs de code, suivez les étapes suivantes :
Cliquez sur Options de projet/construction, puis dans l'onglet Paramètres du compilateur choisir le sous-onglet Autres options, et lieu -std=c99
dans la zone de texte, puis cliquez sur D'accord.
Cela va tourner C99 mode activé pour votre compilateur.
J'espère que cela aidera quelqu'un !
J'ai aussi eu cette erreur.
for (int i=0;i<10;i++) { ..
n'est pas valide dans la norme C89/C90.Comme le dit OysterD, vous devez faire :
int i;
for (i=0;i<10;i++) { ..
Votre code d'origine est autorisé dans les normes C99 et ultérieures du langage C.
Nouvelles fonctionnalités dans C99
- fonctions en ligne
- la déclaration de variable n'est plus limitée à la portée du fichier ou au début d'une instruction composée
- plusieurs nouveaux types de données, notamment long long int, des types entiers étendus facultatifs, un type de données booléen explicite et un type complexe pour représenter des nombres complexes
- tableaux de longueur variable
- prise en charge des commentaires sur une ligne commençant par //, comme en BCPL ou C++
- nouvelles fonctions de bibliothèque, telles que snprintf
- nouveaux fichiers d'en-tête, tels que stdbool.h et inttypes.h
- fonctions mathématiques génériques de type (tgmath.h)
- prise en charge améliorée de la virgule flottante IEEE
- initialiseurs désignés
- littéraux composés
- prise en charge des macros variadiques (macros d'arité variable)
- restreindre la qualification pour permettre une optimisation plus agressive du code
si vous compilez en C, changez
for (int i=0;i<10;i++) { ..
à
int i;
for (i=0;i<10;i++) { ..
Vous pouvez également compiler avec le jeu de commutateurs C99.Mettez -std=c99 dans la ligne de compilation :
gcc -std=c99 foo.c -o foo
RÉF : http://cplusplus.syntaxerrors.info/index.php?title='for'_loop_initial_declaration_used_outside_C99_mode
J'ai eu le même problème et ça marche il suffit de déclarer le i
en dehors de la boucle :
int i;
for(i = low; i <= high; ++i)
{
res = runalg(i);
if (res > highestres)
{
highestres = res;
}
}
Pour toute personne tentant de compiler du code à partir d'une source externe utilisant un utilitaire de génération automatisé tel que Faire, pour éviter d'avoir à retrouver les appels explicites de compilation gcc, vous pouvez définir une variable d'environnement.Entrez sur l'invite de commande ou entrez .bashrc (ou .bash_profile sur Mac) :
export CFLAGS="-std=c99"
Notez qu'une solution similaire s'applique si vous rencontrez un scénario similaire avec une compilation C++ qui nécessite C++ 11, vous pouvez utiliser :
export CXXFLAGS="-std=c++11"
Pour Qt-Creator :ajoutez simplement les lignes suivantes au fichier *.pro...
QMAKE_CFLAGS_DEBUG = \
-std=gnu99
QMAKE_CFLAGS_RELEASE = \
-std=gnu99
Jihene Stambouli a répondu le plus directement à la question OP...La question était :pourquoi
for(int i = low; i <= high; ++i)
{
res = runalg(i);
if (res > highestres)
{
highestres = res;
}
}
produire l'erreur ;
3np1.c:15: error: 'for' loop initial declaration used outside C99 mode
pour lequel la réponse est
for(int i = low...
devrait être
int i;
for (i=low...