Geany, C, GCC4.7, eigenes makefile: Will for-Schleife nicht kompilieren!

Gast #6255830
Lesenswert?

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?
Angehängte Dateien:
Gast #6255866
Lesenswert?

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
Gast #6255900
Lesenswert?

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.
#6256056
Lesenswert?

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.
Persönliche Seite #6256167
Lesenswert?

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" :)
Persönliche Seite #6256208
Lesenswert?

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.
Gast #6256457
Lesenswert?

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren