Namespaces
Variants

Escape sequences

From cppreference.net

Escape-Sequenzen werden verwendet, um bestimmte Sonderzeichen in String-Literalen und Zeichenkonstanten darzustellen.

Die folgenden Escape-Sequenzen sind verfügbar. ISO C verlangt eine Diagnose, wenn dem Backslash ein Zeichen folgt, das hier nicht aufgeführt ist:

Escape-Sequenz
sequence
Beschreibung Darstellung
Einfache Escape-Sequenzen
\' Einfaches Anführungszeichen Byte 0x27 in ASCII-Kodierung
\" Doppeltes Anführungszeichen Byte 0x22 in ASCII-Kodierung
\? Fragezeichen Byte 0x3f in ASCII-Kodierung
\\ Backslash Byte 0x5c in ASCII-Kodierung
\a Hörbarer Signalton Byte 0x07 in ASCII-Kodierung
\b Rückschritt Byte 0x08 in ASCII-Kodierung
\f Seitenvorschub - neue Seite Byte 0x0c in ASCII-Kodierung
\n Zeilenvorschub - neue Zeile Byte 0x0a in ASCII-Kodierung
\r Wagenrücklauf Byte 0x0d in ASCII-Kodierung
\t Horizontaler Tabulator Byte 0x09 in ASCII-Kodierung
\v Vertikaler Tabulator Byte 0x0b in ASCII-Kodierung
Numerische Escape-Sequenzen
\ nnn Beliebiger Oktalwert Codeeinheit nnn
\x n... Beliebiger Hexadezimalwert Codeeinheit n... (beliebige Anzahl hexadezimaler Ziffern)
Universelle Zeichennamen
\u nnnn (seit C99) Unicode -Wert im erlaubten Bereich;
kann mehrere Codeeinheiten ergeben
Codepunkt U+ nnnn
\U nnnnnnnn (seit C99) Unicode -Wert im erlaubten Bereich;
kann mehrere Codeeinheiten ergeben
Codepunkt U+ nnnnnnnn

Inhaltsverzeichnis

Bereich universeller Zeichennamen

Wenn ein universeller Zeichenname einem Codepunkt entspricht, der nicht 0x24 ( '$' ), 0x40 ( '@' ), noch 0x60 ( '`' ) ist und kleiner als 0xA0 , oder ein Ersatzcodepunkt (der Bereich 0xD800-0xDFFF , inklusive) , oder größer als 0x10FFFF , d.h. kein Unicode-Codepunkt (seit C23) , ist das Programm fehlerhaft. Mit anderen Worten, Mitglieder des grundlegenden Quellzeichensatzes und Steuerzeichen (in den Bereichen 0x0-0x1F und 0x7F-0x9F ) können nicht in universellen Zeichennamen ausgedrückt werden.

(seit C99)

Hinweise

\ 0 ist die am häufigsten verwendete oktale Escape-Sequenz, da sie das abschließende Nullzeichen in nullterminierten Zeichenketten darstellt.

Das Zeilenumbruchzeichen \n hat eine besondere Bedeutung bei der Verwendung im Textmodus-I/O : Es wird in die betriebssystemspezifische Zeilenumbruch-Bytefolge konvertiert.

Oktale Escape-Sequenzen haben eine Längenbegrenzung von drei Oktalziffern, brechen jedoch am ersten Zeichen ab, das keine gültige Oktalziffer ist, falls dies früher auftritt.

Hexadezimale Escape-Sequenzen haben keine Längenbeschränkung und enden beim ersten Zeichen, das keine gültige hexadezimale Ziffer ist. Wenn der durch eine einzelne hexadezimale Escape-Sequenz dargestellte Wert nicht in den Wertebereich des in diesem Zeichenliteral oder Zeichenkonstanten verwendeten Zeichentyps passt ( char , char8_t (since C23) , char16_t , char32_t (since C11) , oder wchar_t ), ist das Ergebnis nicht spezifiziert.

Ein universeller Zeichenname in einem schmalen String-Literal oder einem 16-Bit-String-Literal (seit C11) kann auf mehr als eine Codeeinheit abgebildet werden, z.B. \U0001f34c sind 4 char Codeeinheiten in UTF-8 ( \xF0\x9F\x8D\x8C ) und 2 char16_t Codeeinheiten in UTF-16 ( \xD83C\xDF4C ) (seit C11) .

(seit C99)

Ein universeller Zeichenname, der einem Codepunkt größer als 0x10FFFF entspricht (was in ISO/ISC 10646 undefiniert ist), kann in Zeichenkonstanten und Zeichenkettenliteralen verwendet werden. Eine solche Verwendung ist in C++20 nicht zulässig.

(seit C99)
(bis C23)

Die Escape-Sequenz mit Fragezeichen \ ? wird verwendet, um zu verhindern, dass Trigraphs innerhalb von String-Literalen interpretiert werden: Ein String wie "??/" wird kompiliert als " \" , aber wenn das zweite Fragezeichen escaped wird, wie in "? \? /" , wird es zu "??/"

(bis C23)

Beispiel

#include <stdio.h>
int main(void)
{
    printf("This\nis\na\ntest\n\nShe said, \"How are you?\"\n");
}

Ausgabe:

This
is
a
test
She said, "How are you?"

Referenzen

  • C17-Standard (ISO/IEC 9899:2018):
  • 5.2.2 Zeichendarstellungssemantik (S: 18-19)
  • 6.4.3 Universelle Zeichennamen (S: 44)
  • 6.4.4.4 Zeichenkonstanten (S: 48-50)
  • C11-Standard (ISO/IEC 9899:2011):
  • 5.2.2 Zeichendarstellungssemantik (S: 24-25)
  • 6.4.3 Universelle Zeichennamen (S: 61)
  • 6.4.4.4 Zeichenkonstanten (S: 67-70)
  • C99-Standard (ISO/IEC 9899:1999):
  • 5.2.2 Zeichendarstellungssemantik (S: 19-20)
  • 6.4.3 Universelle Zeichennamen (S: 53)
  • 6.4.4.4 Zeichenkonstanten (S: 59-61)
  • C89/C90 Standard (ISO/IEC 9899:1990):
  • 2.2.2 Zeichendarstellungssemantik
  • 3.1.3.4 Zeichenkonstanten

Siehe auch

C++ Dokumentation für Escape-Sequenzen