19 Stimmen

Was bedeutet ein umgekehrter Schrägstrich in C++?

Was bedeutet dieser Code: (insbesondere, was bedeutet ein Backslash '\' ? )

s23_foo += \ 
s8_foo * s16_bar;

Ich habe die Datentypen hinzugefügt, weil sie relevant sein könnten. Vielen Dank für deine Hilfe.

43voto

John Dibling Punkte 96619

Backslashes bedeuten in C++ je nach Kontext zwei verschiedene Dinge.

Als Zeilenfortsetzung

Außerhalb eines Zeichenketten (siehe unten) wird ein \ als Zeilenfortsetzungszeichen verwendet. Die nach dem Ende der Zeile folgende Zeilenumbruch (nicht sichtbar) wird vom Präprozessor effektiv ignoriert und die folgende Zeile wird an die aktuelle Zeile angehängt.

Also:

s23_foo += \ 
s8_foo * s16_bar;

Wird geparst als:

s23_foo += s8_foo * s16_bar;

Zeilenfortsetzungen können verkettet werden. Dies:

s23_foo += \ 
s8_foo * \
s16_bar;

Wird zu diesem:

s23_foo += s8_foo * s16_bar;

In C++ ist Leerzeichen in den meisten Kontexten irrelevant, also ist in diesem speziellen Beispiel die Zeilenfortsetzung nicht erforderlich. Dies sollte problemlos kompiliert werden:

s23_foo += 
s8_foo * s16_bar;

Und kann tatsächlich hilfreich sein, um den Code zu paginieren, wenn Sie eine lange Sequenz von Ausdrücken haben.

Da der Präprozessor ein #define bis zum Zeilenumbruch verarbeitet, sind Zeilenfortsetzungen in Makrodefinitionen am nützlichsten. Zum Beispiel:

#define FOO() \
s23_foo += \ 
s8_foo * s16_bar; 

Ohne das Zeilenfortsetzungszeichen wäre FOO hier leer.

Als Escape-Sequenz

In einem Zeichenketten wird ein Backslash als Begrenzer verwendet, um eine 2-Zeichen-Escape-Sequenz zu beginnen. Zum Beispiel:

"hello\n"

In diesem Zeichenliteral beginnt das \ eine Escape-Sequenz, wobei der Escape-Code n ist. \n führt zu einem Zeilenumbruchzeichen, das in die Zeichenkette eingebettet wird. Natürlich bedeutet dies, dass wenn Sie möchten, dass eine Zeichenkette das Zeichen \ enthält, müssen Sie das auch escapen:

"hello\\there"

führt dazu, dass die Zeichenkette auf dem Bildschirm wie folgt aussieht:

hello\there

Die verschiedenen Escape-Sequenzen sind hier dokumentiert.

27voto

benjymous Punkte 2093

Es ermöglicht Ihnen, eine Anweisung auf die nächste Zeile fortzusetzen - normalerweise benötigen Sie es nur innerhalb eines #define-Makroblocks

0voto

In diesem Fall ermöglicht es Ihnen, die Anweisung auf die nächste Zeile fortzusetzen, damit sie als s23_foo += s8_foo * s16_bar; gelesen werden kann.

-1voto

codery Punkte 19

Sie können auch einige einzigartige Codes verwenden

cout<<"\a";
cout<<"\t";
cout<<"\n";

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X