Anzeige:
Ergebnis 1 bis 14 von 14

Thema: [C/C++] Wozu Leerzeile am Dateiende?

  1. #1
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549

    [C/C++] Wozu Leerzeile am Dateiende?

    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)

  2. #2
    Registrierter Benutzer Avatar von Boron
    Registriert seit
    07.01.2002
    Beiträge
    827
    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)

  3. #3
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    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)

  4. #4
    Registrierter Benutzer
    Registriert seit
    24.06.2003
    Beiträge
    486
    Zitat Zitat von Boron
    Ich habe jetzt mal die gcc Mailinglists durchsucht.
    Fazit:
    - Keine Mensch auf dieser Welt weiß warum der Compiler eine solche Zeile will
    Weil der Standard (sowohl C als auch C++) es so verlangt.
    Zb. C++
    Phases of Translation
    If a source file that is not empty does not end in a newline [...] the behavior is undefined.
    - Es gibt kein Schalter um diese Warnung zu unterdrücken
    - Niemand weiß wie man diese Warnung unterdrücken kann
    Ist wohl auch besser so, sonst haut einem der nächste Compiler den Code um die Ohren, und niemand weiß was Sache ist .
    Zitat Zitat von peschmae
    Das ist also GCC-Spezifisch? Habe gerade keinen anderen Compiler zur Hand.
    Nein ist es nicht (s.o.).
    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.

  5. #5
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    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)

  6. #6
    Registrierter Benutzer
    Registriert seit
    08.07.2002
    Beiträge
    719
    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.

  7. #7
    Registrierter Benutzer Avatar von BlueJay
    Registriert seit
    27.08.2004
    Beiträge
    825
    Zitat Zitat von peschmae
    Das ist also GCC-Spezifisch? Habe gerade keinen anderen Compiler zur Hand.
    Hm, eigentlich nicht.
    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

  8. #8
    Registrierter Benutzer
    Registriert seit
    14.01.2004
    Beiträge
    27
    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

  9. #9
    Registrierter Benutzer
    Registriert seit
    19.04.2001
    Beiträge
    159
    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

  10. #10
    Registrierter Benutzer
    Registriert seit
    22.03.2001
    Beiträge
    650
    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.

  11. #11
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    Zitat Zitat von cybercrow
    Fazit: Nur jemand der ganz komische Programmierwerkzeuge verwendet wird diese Warnung überhaupt bemerken
    Stimmt. Also jetzt nicht der Satz da, der ist Falsch
    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)

  12. #12
    Registrierter Benutzer Avatar von panzi
    Registriert seit
    04.05.2001
    Ort
    Kottingbrunn
    Beiträge
    609
    Zitat Zitat von cybercrow
    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
    AFAIK macht vim KEINE newline, wenn man sie nicht will. Ich glaub man muss bei gcc mit -Wall kompelirien um die Meldung zu bekommen.
    Intel Core 2 Duo CPU 2.66GHz; Nvidia GeForce 8 8800 GTS; 4GB RAM; Fedora 12; KDE-testing

  13. #13
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    Zitat Zitat von panzi
    AFAIK macht vim KEINE newline, wenn man sie nicht will. Ich glaub man muss bei gcc mit -Wall kompelirien um die Meldung zu bekommen.
    Nein, bei mir kommts auch ohne das -Wall

    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)

  14. #14
    Registrierter Benutzer
    Registriert seit
    14.10.2003
    Beiträge
    35
    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

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •