from - Einzeilige C++-Kommentare gefolgt von \ transforms in mehrzeiligem Kommentar




use c++ code in c (4)

Wo ist im C ++ - Standard die Funktion dokumentiert, dass, wenn eine Zeile mit //some comment\ style (am Ende der Zeile \ ) gesetzt wird, der Kommentar in eine Multilinie umgewandelt wird?

Getestet mit g ++ 4.8 und VS 2012

//some interesting stuff\
another interesting stuff\
etc

https://code.i-harness.com


C ++ - Standard, 2.2 - Übersetzungsphasen. Phase 2 beinhaltet

Jede Instanz eines Backslash-Zeichens ( \ ) unmittelbar gefolgt von einem Zeichen für eine neue Zeile wird gelöscht, wodurch physische Quellzeilen zu logischen Quellzeilen zusammengefügt werden.

und Phase 3 beinhaltet

Jeder Kommentar wird durch ein Leerzeichen ersetzt

Der Backslash am Zeilenende wird also vor Kommentaren erkannt.

Äquivalente Phasen 2 und 3 für C finden Sie in C-Standard (5.1.1.2 Übersetzungsphasen in meinem Entwurf).


Eine \ gefolgt von einer neuen Zeile wird sehr früh im Übersetzungsprozess entfernt, bevor der Compiler nach Kommentaren und dem Ende von Kommentaren sucht, siehe Abschnitt 2.2, Phasen der Übersetzung.


Gemäß Working Draft, Standard für die Programmiersprache C ++ , Kapitel 2 Lexikalische Konventionen, 2.1 - 2):

Jede Instanz eines neuen Zeilenzeichens und eines unmittelbar vorangehenden Backslash-Zeichens, eines Backslash-Zeichens (), unmittelbar gefolgt von einem neuen Zeilenzeichen, wird gelöscht, wodurch physische Quellzeilen zu logischen Quellzeilen zusammengefügt werden. Nur der letzte Backslash in einer physischen Quellzeile kann Teil eines solchen Spleißes sein.

Dies gilt auch für Kommentare und ist immer noch Teil der endgültigen Version.


Möchten Sie für C oder C ++ wissen? ( EDIT: In der ursprünglichen Frage OP nach C / C ++ gefragt)

Für C folgenden Abschnitt aus ISO / IEC 9899: TC2 Committee Draft vom 6. Mai 2005 beantwortet WG14 / N1124 Ihre Frage.

5.1.1.2 Übersetzungsphasen

[2] Jede Instanz eines Backslash-Zeichens (), dem unmittelbar ein Zeichen für eine neue Zeile folgt, wird gelöscht, wobei physische Quellzeilen zu logischen Quellzeilen zusammengefügt werden. Nur der letzte Backslash in einer physischen Quellzeile kann Teil eines solchen Spleißes sein. Eine nicht leere Quelldatei muss mit einem neuen Zeilenende enden, dem vor einem solchen Splicing nicht sofort ein Backslash-Zeichen vorangestellt werden darf.

Für C ++ können Sie sich auf Phase 2 unter en.cppreference.com beziehen

1) Wenn ein Backslash am Ende einer Zeile erscheint (unmittelbar gefolgt von dem Zeilenumbruchzeichen), werden sowohl der Backslash als auch der Newline gelöscht, wobei zwei physische Quellzeilen zu einer logischen Quellzeile zusammengefasst werden. Dies ist eine Operation mit einem Durchlauf. Eine Zeile, die in zwei umgekehrten Schrägstrichen endet, gefolgt von einer leeren Zeile, kombiniert keine drei Zeilen zu einer Zeile. Wenn in dieser Phase ein universeller Zeichenname (\ uXXX) gebildet wird, ist das Verhalten undefiniert.
2) Wenn eine nicht leere Quelldatei nach diesem Schritt nicht mit einem Zeilenvorschub endet (unabhängig davon, ob sie ursprünglich keine Zeilenumbrüche hatte oder mit einem umgekehrten Schrägstrich endete), ist das Verhalten undefiniert (bis C ++ 11) ein abschließender Zeilenumbruch hinzugefügt (seit C ++ 11)

Wenn Ihre aktuelle Zeile ein einzeiliger Kommentar ist, wird die folgende Zeile als Kommentar verdaut.





c