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.
MfG Peschmä
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.
MfG Peschmä
The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)
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.
Gruß Boron (der sich oft wegen mieser Rechtschreibung anderer die Augen reiben muss)
LINUX IS LIKE AN INDIAN TENT: NO GATES, NO WINDOWS AND AN APACHE INSIDE!
Hardware Monitoring unter Linux -> http://santafu.sourceforge.net (Temperaturen, Lüfterdrehzahlen und Spannungen)
Das ist also GCC-Spezifisch? Habe gerade keinen anderen Compiler zur Hand.
MfG Peschmä
The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)
Weil der Standard (sowohl C als auch C++) es so verlangt.Zitat von Boron
Zb. C++
Phases of Translation
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 .- 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 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ä
The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)
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 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
"I could have made some money developing proprietary software, and perhaps amused myself writing code. But I knew that at the end of my career, I would look back on years of building walls to divide people, and feel I had spent my life making the world a worse place." -- Richard M. Stallman
Wissenskommunismus und Wissenskapitalismus
Offene Quellen und öffentliches Wissen
und vieles mehr: VRG's Texts , Philosophy of the GNU Project
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 FalschZitat 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ä
The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)
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 von cybercrow
Intel Core 2 Duo CPU 2.66GHz; Nvidia GeForce 8 8800 GTS; 4GB RAM; Fedora 12; KDE-testing
Nein, bei mir kommts auch ohne das -WallZitat von panzi
MfG Peschmä
The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)
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...
Lesezeichen