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.