Wie kann ich fix „für die erste Schleife Deklaration außerhalb C99-Modus verwendet“ GCC Fehler?
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?
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.
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
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...