Comment puis-je corriger l'erreur GCC « Déclaration initiale de la boucle for utilisée en dehors du mode C99 » ?

StackOverflow https://stackoverflow.com/questions/24881

  •  09-06-2019
  •  | 
  •  

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?

Était-ce utile?

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.

@Blorgbeard:

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

http://en.wikipedia.org/wiki/C99

Une visite de C99

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...
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top