Hallo! Normalerweise stelle ich nicht so blöde Fragen aber ich habe mir schon einige Threads durchgelesen, die dieses Thema behandlen, habe den Fehler aber nicht gefunden (oder ich bin blind). Deshalb wäre ich sehr dankbar, wenn ihr mir helfen könntet. Fehlermeldungen und Warnungen: F:\Maxi\Documents\Target\Digitaluhr\HMS-Uhr-V3.0\HMS-Uhr-V3.0\HMS-Uhr-V3 .0.c(13,5): 'main' is normally a non-static function F:\Maxi\Documents\Target\Digitaluhr\HMS-Uhr-V3.0\HMS-Uhr-V3.0\HMS-Uhr-V3 .0.c(29,1): expected declaration or statement at end of input LG
Der Fehler liegt wohl in einer der beiden Header-Dateien. Vermutlich eine fehlende schließende geschweifte Klammer.
Danke! Habe bei einem Switch die Klammer vergessen. Warum schreit er aber dann in der C-Datei und nicht in der Header?
Marcus schrieb: > Danke! Habe bei einem Switch die Klammer vergessen. Warum schreit er > aber dann in der C-Datei und nicht in der Header? Weil sich der Fehler fortpflanzt. Die Unterteilung, die du in Form von verschiednenen Dateien siehst, sieht der Compiler nicht mehr, weil der Präprozessor durch das #include schon alle Dateien in eine einzige Übersetzungseinheit zusammengeführt hat. Und solange das was der Compiler zu Gesicht bekommt der Syntax entspricht, gibt es keinen Fehler. Dazu kommt eine Erweiterung des gcc, die es erlaubt innerhalb von Funktionen wieder neue Funktionen zu machen. Und so stapeln sich dann ab deiner vergessenen } alle danach folgenden Funktionen in die fehlerhafte Funktion hinein. Bis dann eben der COmpiler am Ende drauf kommt, dass da eine Funktion noch gar nicht beendet wurde.
Achso, das heißt, dass er quasi die Headerdatei an Ort und Stelle "einfügt" und erst am Ende der C-Datei schreit, weil ihm eine Klammer fehlt. Oder?
So wie eben der Präprozessor arbeitet. Der arbeitet erst ein mal alle # Zeilen ab und erstellt daraus einen neuen Quelltext, den er dann an den eigentlichen Compiler weitergibt. Was das alles bedeutet, was zwischen den # Zeilen steht, interessiert den Präprozessor nicht. Der kümmert sich erst mal nur um alle # Anweisungen.
Marcus schrieb: > Habe bei einem Switch die Klammer vergessen. Warum schreit er > aber dann in der C-Datei und nicht in der Header? Warum schreibst du ein switch in den Header? Der Header dient als Interface und enthält Deklarationen, aber keinen Code.
Marcus schrieb: > Achso, das heißt, dass er quasi die Headerdatei an Ort und Stelle > "einfügt" und erst am Ende der C-Datei schreit, weil ihm eine Klammer > fehlt. Oder? Wenn er in der Header-Datei einen Fehler erkennt, schreibt er das natürlich mit dazu. Aber in diesem Fall erkennt er im Header keinen Fehler. Erst wenn er ganz zum Schluß auf einmal merkt, daß da noch eine schließende Klammer fehlt, merkt er, daß was nicht stimmt und meldet deshalb erst dort den Fehler.
Wenn du den Compiler (GCC?) dazu bringst Standard-C zu verarbeiten (Parameter '-std=c99'?), bekommst du die Fehlermeldung zumindest früher, weil in C keine Funktionen-in-Funktionen (nested Functions) erlaubt sind.
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.