Wie kann ich fix „für die erste Schleife Deklaration außerhalb C99-Modus verwendet“ GCC Fehler?

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

  •  09-06-2019
  •  | 
  •  

Frage

Ich versuche das 3n + 1 Problem zu lösen, und ich habe eine for Schleife, die wie folgt aussieht:

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

        }

Leider diesen Fehler Ich erhalte, wenn ich versuche mit GCC zu kompilieren:

  

3np1.c: 15: Fehler: 'für' loop Anfangs   Deklaration außerhalb C99-Modus

Ich weiß nicht, was C99-Modus befindet. Irgendwelche Ideen?

War es hilfreich?

Lösung

Ich würde versuchen, i außerhalb der Schleife zu erklären!

Viel Glück auf die Lösung von 3n + 1: -)

Hier ist ein Beispiel:

#include <stdio.h>

int main() {

   int i;

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

   return 0;
}

Lesen Sie mehr auf for-Schleifen in C hier .

Andere Tipps

Es gibt einen Compiler-Schalter, der C99-Modus ermöglicht, die unter anderem Erklärung a erlaubt Variable in der for-Schleife. Um sie zu aktivieren Verwendung der Compiler-Schalter -std=c99

oder als @OysterD sagt, erklären die Variable außerhalb der Schleife.

Zum Umschalten auf C99 Modus in Codeblöcken , folgen den nächsten Schritten:

Klicken Sie auf Projekt / Build-Optionen , dann im Register Compiler-Einstellungen wählen Subreiter Weitere Optionen und Ort -std=c99 im Textbereich, und klicken Sie auf Ok .

Dies wird mich C99 Modus für Ihre Compiler.

Ich hoffe, das jemand helfen!

Ich habe diesen Fehler zu bekommen.

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

ist im C89 / C90-Standard nicht gültig. Wie OysterD sagt, was Sie tun müssen:

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

Ihr Original-Code wird in C99 und später Standards der C-Sprache erlaubt.

@Blorgbeard :

Neue Funktionen in C99

  • Inline-Funktionen
  • Variablendeklaration nicht mehr eingeschränkt Umfang oder den Beginn einer zusammengesetzten Anweisung in Datei
  • mehr neue Datentypen, einschließlich lange long int, optionale erweitern Integer-Typen, ein expliziten boolean Datentyp und einen komplexen Typ komplexe Zahlen darzustellen
  • Arrays variabler Länge
  • Unterstützung für eine Inline-Kommentare beginnend mit //, wie in BCPL oder C ++
  • neue Bibliotheksfunktionen, wie snprintf
  • neue Header-Dateien, wie stdbool.h und inttypes.h
  • Typ-generic mathematische Funktionen (tgmath.h)
  • verbesserte Unterstützung für IEEE-Gleitkomma
  • bezeichnet initializers
  • Verbindung Literalen
  • Unterstützung für variadische Makros (Makros variabler arity)
  • beschränkt Qualifikation aggressivere Code-Optimierung ermöglichen

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

eine Tour durch C99

Wenn Sie in C Änderung kompilieren

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

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

Sie können auch mit dem C99 Schaltersatz kompilieren. Setzen Sie -std = c99 in der Kompilation Zeile:

gcc -std=c99 foo.c -o foo

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

Ich hatte das gleiche Problem und es funktioniert einfach die i außerhalb der Schleife deklarieren müssen:

int i;

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

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

}

Für alle versuchen, Code von einer externen Quelle zu kompilieren, die ein automatisiertes Build-Dienstprogramm verwendet wie Erstellen , zu vermeiden, dass die explizite gcc Kompilierung auf der Spur, die Anrufe können Sie eine Umgebungsvariable gesetzt. Geben Sie auf Eingabeaufforderung oder setzen in .bashrc (oder .bash_profile auf Mac):

export CFLAGS="-std=c99"

Beachten Sie, dass eine ähnliche Lösung gilt, wenn Sie in ein ähnliches Szenario mit C ++ Kompilierung ausführen, die C ++ 11 erfordert, können Sie verwenden:

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

Für Qt-Creator: direkt neben Zeilen * .pro-Datei hinzufügen ...

QMAKE_CFLAGS_DEBUG = \
    -std=gnu99

QMAKE_CFLAGS_RELEASE = \
    -std=gnu99

Jihene Stambouli beantwortet OP Frage am ehesten ... Frage war; warum funktioniert

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

, um den Fehler erzeugen;

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

, für die die Antwort

for(int i = low...

sollte

int i;
for (i=low...
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top