Am 29.09.2023 um 20:17 schrieb Sieghard Schicktanz:
Es gibt 8 translation phases, 7 davon sind nach Deinem Gusto Zwischenschritte. Der Standard definiert alle diese Phasen - ganz normal.
Es kommt darauf an, von welcher Warte aus die Betrachtung erfolgt. Der Standard definiert steif nacheinander.
6.4.9 Comments 1 Except within a character constant, a string literal, or a comment, the characters /* introduce a comment. The contents of such a comment are examined only to identify multibyte characters and to find the characters */ that terminate it. 2 Except within a character constant, a string literal, or a comment, the characters // introduce a comment that includes all multibyte characters up to, but not including, the next new-line character. The contents of such a comment are examined only to identify multibyte characters and to find the terminating new-line character.Ein NL gehört übrigens _nicht_ zum Zeilenkommentar. Ich meine, das hat hier jemand mal gegenteilig erzählt.
Die Definitionen der Kommentare enthalten keinerlei Hinweise auf eine Betrachtungsebene. Bezug ist folglich die sichtbare C-Quelle (read-only).
EXAMPLE //\ i(); // part of a two-line comment /\ / j(); // part of a two-line comment
Der Standard bezieht seine Definitionen offenbar einerseits auf die sichtbare C-Quelle, andererseits auf zeitlich spätere Zustände durch den PP. Die translation phases 2 und 3 werden /blind/ und unabhängig verarbeitet. In Phase 2 existieren folglich gar keine Kommentare. Phase 2 generiert potentiell Kommentare, ohne dies zu wissen [1]. Phase 3 sucht danach nach Kommentaren, um sie alle durch ein Leerzeichen zu ersetzen. [1] Deshalb verhalte ich mich bei Zeilenverlängerungen mit Kommentaren wie zuvor beschrieben. Wie unschwer zu sehen, sind verteilte Kommentare dort Unfug.
Kommentare werden gelöscht. Ich meine, das kann als ein Verschwinden bezeichnet werden.
Sieht nicht danach aus.
Ich habe doch berichtet, daß ich gcc12 habe, und daß mit dem ein externer /usr/local/bin/cpp kam. Externe cpp hatte ich schon in den 1980ern gesehen. Allerdings ohne eigene man-Page, sondern in /privaten/ Compiler-Verzeichnissen. Ich weiß nicht, was ich mit einem ausgegliederten cpp mit man-Page anfangen soll, wo ich doch stets einen genau passenden PP in jedem cc habe.
Ja, das weiß ich seit bald 40 Jahren. Insbesondere muß ich dann keine 7 Zeilen langen Listen aus Argumenten für den Compiler handhaben.
Dann verwende ich 'cc -E'. Ich habe schon vor Jahrzehnten Compiler benutzt, die PP-Ausgaben in Dateien mit Endung .i geschrieben hatten.
Nein, ist es nicht. Lies die man-Page eines externen cpp. Ein externer cpp kann beliebig unpassend zum internen System-Compiler-cpp sein.