Moin, gcc/g++ hat ja die Angewohnheit eine fehlende Leerzeile am Dateiende zu bemeckern. Hat das irgend einen Grund?
Ich dachte C/C++ sind Whitespace-Neutral oder wie man dem auch immer sagt. :confused:
MfG Peschmä
Druckbare Version
Moin, gcc/g++ hat ja die Angewohnheit eine fehlende Leerzeile am Dateiende zu bemeckern. Hat das irgend einen Grund?
Ich dachte C/C++ sind Whitespace-Neutral oder wie man dem auch immer sagt. :confused:
MfG Peschmä
Ich habe jetzt mal die gcc Mailinglists durchsucht.
Fazit:
- Keine Mensch auf dieser Welt weiß warum der Compiler eine solche Zeile will
- Es gibt kein Schalter um diese Warnung zu unterdrücken
- Niemand weiß wie man diese Warnung unterdrücken kann
Einzige Lösung sei es wohl tatsächlich in allen Dateien eine Leerzeile am Ende einzufügen.
Könnte da der Präcompiler der Übeltäter sein?
So wie #endif verlangt wird, nach z.B. einem #ifndef, könnte er ja auch eine Leerzeile am Ende verlangen?
Der Grund bleibt allerdings schleierhaft.
Das ist also GCC-Spezifisch? Habe gerade keinen anderen Compiler zur Hand.
MfG Peschmä
Weil der Standard (sowohl C als auch C++) es so verlangt.Zitat:
Zitat von Boron
Zb. C++
Phases of Translation
Zitat:
If a source file that is not empty does not end in a newline [...] the behavior is undefined.
Ist wohl auch besser so, sonst haut einem der nächste Compiler den Code um die Ohren, und niemand weiß was Sache ist ;).Zitat:
- Es gibt kein Schalter um diese Warnung zu unterdrücken
- Niemand weiß wie man diese Warnung unterdrücken kann
Nein ist es nicht (s.o.).Zitat:
Zitat von peschmae
Es ist undefiniert, was ein Compiler macht, dazu gehört auch, daß ein Compiler eine Warnung werfen kann, oder still bleibt.
Er könnte auch komplett abbrechen.
Aha, wenn das im Standard ist, von mir aus. :)
Dann ändere ich die Frage ein wenig ab: Hat das irgend einen Grund dass das so im Standard ist?
Das erscheint mir ein bisschen nach "wir machen den Leuten das Leben so schwer wie möglich" - da macht man ja Fallunterscheidungen die nicht wirklich relevant sind (oder etwa doch?).
MfG Peschmä
Ich hab mal irgendwo im Zusammenhang mit einer Qt-Sache und Solaris gelesen, dass da der Compiler noch strenger sein soll: Wenn kein newline, dann kein Kompilat.
Hm, eigentlich nicht.Zitat:
Zitat von peschmae
Der Parser haut sich wahrscheinlich eine ganze Zeile in den Puffer, und wenn das Zeilenende fehlt/nicht das letzte Zeichen ist, stolpert er.
Andere Compiler werten dann sogar ohne Vorwarnung die letzte (Halb-)-Zeile nicht aus. (Fortran4/5 auf Großrechner, ein paar Pascal-Compiler).
so long,
BlueJay
Ich mag mich schwammig daran erinnern, dass das mit der End-of-File-Erkennung zusammenhängt, also das manche lesende Applikationen das Ende der Files nicht korrekt erkennen, oder verwirrt sind, wenn diese Leerzeile fehlt. Ich habe noch ein wenig gegooglet, jedoch auch nichts genaueres gefunden. Der Grund sollte demnach so wie BlueJay beschrieben hat oder zumindest in der Richtung zu finden sein.
Greetz
McHurt
Dieser Thread hat mich jetzt ganz schön ins Schwitzen gebracht.
Ich habe eigentlich nie darauf geachtet, dass am ende eine Leerzeile ist und nie eine Warnung bekommen.
Auch nach krampfhaften Versuchen habe ich weder mit emacs noch mit vim oder gedit eine C-Datei hinbekommen bei der ich eine Warnung bekomme.
Scheint als ob all diese Editoren automatisch darauf achten, dass das Dateiende richtig ist.
Der erster Editor mit dem ich jetzt eine C-Datei erzeugen konnte die diese Warnung des gcc hervorruft ist kwrite.
Fazit: Nur jemand der ganz komische Programmierwerkzeuge verwendet wird diese Warnung überhaupt bemerken :D ;)
Im ANSI-C-Standard ist eine solche Leerzeile vorgeschrieben.
Weil die redundant ist, ist sie eigentlich nicht nötig, aber sie verbessert die Lesbarkeit des Codes etwas.
Stimmt. Also jetzt nicht der Satz da, der ist Falsch ;)Zitat:
Zitat von cybercrow
Sollte wohl heissen: Nur jemand der ganz komische Programmierwerkzeuge verwendet wird diese Warnung überhaupt erhalten.
Ich meine, bei Emacs und Vi und Nano ist die Newline halt einfach von selber da. Mal gucken ob ich das Kate auch beibringen kann... ;)
MfG Peschmä
AFAIK macht vim KEINE newline, wenn man sie nicht will. Ich glaub man muss bei gcc mit -Wall kompelirien um die Meldung zu bekommen.Zitat:
Zitat von cybercrow
Nein, bei mir kommts auch ohne das -WallZitat:
Zitat von panzi
MfG Peschmä
afaik ist der irix cc mit dem newline sogar etwas strenger und verweigert die weiterverarbeitung.
warum es überhaupt eingeführt wurde weiss icht nicht. ich spekuliere darauf, dass es schöner aussieht, wenn man mit cat dateien aneinanderhängt...