Hallo, diese for-Schleife wird vom gcc mit folgenden Fehlermelungen beworfen: gcc -Wall -c "menue.c" (im Verzeichnis: /home/ranger/Projekte/Mal_sehn_obs_geht) menue.c:9:1: error: expected identifier or ‘(’ before ‘for’ for(i=0;i<8;i++) ^~~ menue.c:9:10: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘<’ token for(i=0;i<8;i++) ^ menue.c:9:14: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘++’ token for(i=0;i<8;i++) ^~ menue.c:7:13: warning: ‘menueposts’ defined but not used [-Wunused-variable] static char menueposts[8][7] = {"Clock:","Temp1:","Temp2:","BoVol:","Date :","Hoo :","mi/ma:","Res. "}; ^~~~~~~~~~ Kompilierung fehlgeschlagen. Wenn ich die Schleife Auskommentiere geht alles wie es soll. Benutzt werden die Geany-IDE, GCC4.7 und ein eigenes Makefile(siehe Anhang). Was ist da los?
In welcher Funktion steht die for-Schleife?
Hallo, die steht in "menue.c".
> diese for-Schleife wird vom gcc mit folgenden Fehlermelungen beworfen:
Und das zurecht.
HTH
Jens schrieb: > Hallo, > die steht in "menue.c". Die falsche Antwort ;-) Sie steht in keiner Funktion. Aber sie sollte.
Hey, als ich .c geschrieben habe ist es mir aufgefallen: Ohne eine Funktion wird wohl die Schleife nie erreicht/ausgeführt. Danke für diesen kurzen, knackigen aber zielführenden Hinweis. Wiso nur kann man das den Fehlermeldungen nicht entnehmen? Jens
Jens schrieb: > Wiso nur kann man das den Fehlermeldungen nicht entnehmen? Die Fehlermeldungen des Compilers sind nicht dazu gedacht, das Lernen der Sprache zu ersetzen. Die Meldung erfüllt in diesem Fall ihren Zweck zu 100%. Sie zeigt dem Programmierer auf die Zeile genau, wo er einen Fehler gemacht hat.
Jens schrieb: > Hey, > als ich .c geschrieben habe ist es mir aufgefallen: > > Ohne eine Funktion wird wohl die Schleife nie erreicht/ausgeführt. So kann man es auch formulieren. In C muss die Schleife in einer Funktion stehen, sonst ist das ein Fehler. Sie wird dadurch tatsächlich in gewissem Sinne nie erreicht bzw. ausgeführt, weil der Compiler mit Fehler abbricht und daher schlicht keinen ausführbaren Code erzeugt. > Wiso nur kann man das den Fehlermeldungen nicht entnehmen? Weil es für einen Menschen zwar einfach aussieht, aber tatsächlich einen ziemlichen Aufwand bedeutet, dem Compiler sowas beizubringen. Der schaut auf ganz andere Weise über den Code als ein Mensch.
:
Bearbeitet durch User
Ganz nebenbei: in den letzten 7 Jahren sind die Fehlermeldungen des gcc deutlich besser geworden. Der gcc-4.9 ist von 2014, aktuell ist 10.2, selbst bei Debian gibt es schon die Version 9.2. Was spricht gegen ein gelegentliches Update?
Rolf M. schrieb: > In C muss die Schleife in einer > Funktion stehen, sonst ist das ein Fehler. Außerhalb von Funktionen sind in C nur Deklarationen, Definitionen und Initialisierungen erlaubt. Jedenfals kein "auszuführender" Code.
Jens schrieb: > Wiso nur kann man das den Fehlermeldungen nicht entnehmen? Weil der Compiler das for gar nicht sieht, weil er es da nicht erwartet. Und die Fehlermeldung dass etwas Anderes erwartet wurde, hast du bekommen.
Vor C mit BASIC gearbeitet? :-) Mach deine "menueposts" ruhig "const" (bei AVR: "progmem"). Wenn du nur auf dem PC unterwegs bist, empfehle ich, dich frühzeitig mit STL und viel "const" und vor allem "const ref" auseinanderzusetzen. Vereinfacht vieles, ohne "const (ref)" wirds bei großen Datenmengen allerdings langsam (wg. copy). Bei Mikrocontrollern, z.B. ARM, hat "const" den Vorteil, dass diese Daten im Flash und nicht im RAM landen. Bei AVR braucht man dafür "progmem". Weiterhin kann der Compiler dadurch einige Optimierungen vornehmen. Ggf. in Verbindung mit "static" (Begrenzung auf das aktuelle Modul). Ansonsten: MS Viusual Studio schmeisst immerhin nen Syntax Error Clang ist ähnlich "verwirrend" :)
Dirk B. schrieb: > Random .. schrieb: >> empfehle ich, dich frühzeitig mit >> STL > > Bei C? C++ :-) Lohnt auf dem PC aber immer, auch bei hochperformanten Sachen. Zur Zeit spiele ich mit C++ auf einem STM32F4 mit C++ herum. STDIO retarget mit C++ low level Treibern, eigenem VFS, CMSIS-RTOS Kapselung mit C++ (also Thread ist geerbter Member einer Klasse). Sehr sauber, interessant, nur Debuggen ist (noch) etwas painful, da keine STL Unterstützung.
:
Bearbeitet durch User
Hallo, Dank für die zahlreichen Erklärungen. Bin eigentlich auf AVR unterwegs und wollte jetzt nur mal etwas entwerfen, eine Menüführung für ein Projekt mit Atmega und Display eben. Hier im Garten habe ich keinen AVR dabei, da übe ich einfach mit dem Laptop. Das mir so ein Fehler unterläuft ist mir natürlich peinlich, immerhin befasse ich mich seit 10 Jahren hobbymäßig mit C. Dachte es liegt villeicht am makefile. Jens
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.