Nach include zwingend Zeilenumbruch?



  • Hi(gh)!

    (ich mache meine Drohung aus dem ersten Thread von heute wahr - ich ackere mich jetzt Seite für Seite durch den "Erlenkötter" und sobald irgendein Problem auftaucht, das ich nicht selbst zergoogeln kann, nerve ich Euch!)

    Auf Seite 23 in "C - Programmieren von Anfang an" soll anhand einer absichtlich unübersichtlich gestalteten Version von bspl0001.c die weitestgehende Formatfreiheit von C demonstriert werden... leider scheitert dies schon in der zweiten Zeile, wo auf #include <stdio.h> gleich main() folgt... und prompt schmeißt mein gcc auch im C90-Modus die Fehlermeldung:

    error: expected identifier or ‘(’ before string constant
    3 | "\nDies ist ein erstes C-Programm.\n");printf(

    was gcc/g++-typisch (und mich traditionell schwer einschüchternd...) einen ganzen Rattenschwanz an weiteren zeilenbezogenen Fehlermeldungen nach sich zieht...

    War es jemals (eventuell lange vor C90) möglich, ein C-Programm ohne Zeilenumbruch nach der include-Zeile zu kompilieren?

    Bis bald im Khyberspace!

    Yadgar



  • Nein, das ist ein Fehler im Buch. Alle Präprozessoranweisungen mit # am Anfang werden zeilenweise abgearbeitet und anschließend verworfen, ehe der Code an den eigentlichen Parser (für C bzw. C++) übergeben wird.

    Also kann man z.B. noch Kommentare direkt hinter #include <...> oder #ifdef ... anfügen:

    #include <stdio.h> a comment
     
    #ifndef X another comment
      #error X not defined!
    #endif
    

    s. Ideone Code 1 (welcher den GCC verwendet)
    Ich habe extra #error hier eingefügt, damit man die Warnungen bzgl. der Kommentare sehen kann.
    Daher sollte man bei Kommentaren auch hier /*...*/ bzw. // verwenden:
    s. Ideone Code 2 (nun ohne Warnungen)

    Vor der Standardisierung mag es aber vllt. einzelne Compiler (bzw. deren Präprozessor) gegeben haben, die dies anders gehandhabt haben.


Anmelden zum Antworten