Come posso correggere l'errore GCC "dichiarazione iniziale del ciclo for utilizzata al di fuori della modalità C99"?

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

  •  09-06-2019
  •  | 
  •  

Domanda

Sto cercando di risolvere il problema 3n+1 e ho un for ciclo che assomiglia a questo:

for(int i = low; i <= high; ++i)
        {
                res = runalg(i);
                if (res > highestres)
                {
                        highestres = res;
                }

        }

Sfortunatamente ricevo questo errore quando provo a compilare con GCC:

3np1.c:15:errore:Dichiarazione iniziale "per" Utilizzato al di fuori della modalità C99

Non so cosa sia la modalità C99.Qualche idea?

È stato utile?

Soluzione

Proverei a dichiarare i fuori dal giro!

Buona fortuna per risolvere 3n+1 :-)

Ecco un esempio:

#include <stdio.h>

int main() {

   int i;

   /* for loop execution */
   for (i = 10; i < 20; i++) {
       printf("i: %d\n", i);
   }   

   return 0;
}

Per saperne di più sui cicli for in C Qui.

Altri suggerimenti

C'è un'opzione del compilatore che abilita Modalità C99, che tra le altre cose consente la dichiarazione di una variabile all'interno del ciclo for.Per attivarlo utilizzare l'opzione del compilatore -std=c99

O come dice @OysterD, dichiara la variabile all'esterno del ciclo.

Per passare a C99 modalità in CodeBlocks, seguire i passaggi successivi:

Clic Opzioni di progetto/costruzione, poi nella tab Impostazioni del compilatore scegli la sottoscheda Altre opzioni, e luogo -std=c99 nell'area di testo e fare clic OK.

Questo cambierà C99 modalità attiva per il tuo compilatore.

Spero che questo possa aiutare qualcuno!

Anch'io ho ricevuto questo errore.

for (int i=0;i<10;i++) { ..

non è valido nello standard C89/C90.Come dice OysterD, devi fare:

int i;
for (i=0;i<10;i++) { ..

Il tuo codice originale è consentito negli standard C99 e successivi del linguaggio C.

@Blorgbeard:

Nuove funzionalità in C99

  • funzioni in linea
  • la dichiarazione di variabile non è più limitata all'ambito del file o all'inizio di un'istruzione composta
  • diversi nuovi tipi di dati, inclusi long long int, tipi interi estesi opzionali, un tipo di dati booleano esplicito e un tipo complesso per rappresentare numeri complessi
  • array di lunghezza variabile
  • supporto per commenti di una riga che iniziano con //, come in BCPL o C++
  • nuove funzioni di libreria, come snprintf
  • nuovi file di intestazione, come stdbool.h e inttypes.h
  • funzioni matematiche generiche (tgmath.h)
  • supporto migliorato per la virgola mobile IEEE
  • inizializzatori designati
  • letterali composti
  • supporto per macro variadic (macro di arità variabile)
  • limitare la qualificazione per consentire un'ottimizzazione del codice più aggressiva

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

Un giro di C99

se compili in C cambia

for (int i=0;i<10;i++) { ..

A

int i;
for (i=0;i<10;i++) { ..

È inoltre possibile compilare con il set di opzioni C99.Inserisci -std=c99 nella riga di compilazione:

gcc -std=c99 foo.c -o foo

RIF: http://cplusplus.syntaxerrors.info/index.php?title='for'_loop_initial_declaration_used_outside_C99_mode

Ho avuto lo stesso problema e funziona, devi solo dichiarare il file i fuori dal giro:

int i;

for(i = low; i <= high; ++i)

{
        res = runalg(i);
        if (res > highestres)
        {
                highestres = res;
        }

}

Per chiunque tenti di compilare codice da una fonte esterna che utilizza un'utilità di compilazione automatizzata come Fare, per evitare di dover rintracciare le chiamate esplicite di compilazione di gcc è possibile impostare una variabile d'ambiente.Inserisci al prompt dei comandi o inserisci .bashrc (o .bash_profile su Mac):

export CFLAGS="-std=c99"

Tieni presente che una soluzione simile si applica se ti imbatti in uno scenario simile con la compilazione C++ che richiede C++ 11, puoi utilizzare:

export CXXFLAGS="-std=c++11"

Per Qt Creator:basta aggiungere le righe successive al file *.pro...

QMAKE_CFLAGS_DEBUG = \
    -std=gnu99

QMAKE_CFLAGS_RELEASE = \
    -std=gnu99

Jihene Stambouli ha risposto alla domanda OP in modo più diretto...La domanda era;perché lo fa

for(int i = low; i <= high; ++i)
{
    res = runalg(i);
    if (res > highestres)
    {
        highestres = res;
    }
}

produrre l'errore;

3np1.c:15: error: 'for' loop initial declaration used outside C99 mode

per cui la risposta è

for(int i = low...

dovrebbe essere

int i;
for (i=low...
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top