Namensräume
Varianten
Aktionen

Escape-Sequenzen

Von cppreference.com
< c‎ | Sprache

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

Die folgenden Escape-Sequenzen sind verfügbar. ISO C erfordert eine Diagnose, wenn auf den Backslash ein nicht hier aufgeführter Buchstabe folgt.

Escape
Sequenz
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 akustischer Signalton Byte 0x07 in ASCII-Kodierung
\b Rücktaste 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 Code-Einheit nnn
\xn... beliebiger Hexadezimalwert Code-Einheit n... (beliebige Anzahl von Hexadezimalziffern)
Universelle Zeichenbezeichner
\unnnn (seit C99) Unicode-Wert im zulässigen Bereich;
kann zu mehreren Code-Einheiten führen
Code-Punkt U+nnnn
\Unnnnnnnn (seit C99) Unicode-Wert im zulässigen Bereich;
kann zu mehreren Code-Einheiten führen
Code-Punkt U+nnnnnnnn

Inhalt

Bereich der universellen Zeichenbezeichner

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

(seit C99)

[bearbeiten] Anmerkungen

\0 ist die am häufigsten verwendete Oktal-Escape-Sequenz, da sie das terminierende Nullzeichen in null-terminierten Zeichenketten darstellt.

Das Zeilenumbruchzeichen \n hat eine besondere Bedeutung bei der Verwendung in Textmodus-E/A: Es wird in das betriebssystemspezifische Zeilenumbruchbyte oder die Byte-Sequenz umgewandelt.

Oktale Escape-Sequenzen haben eine Längenbeschränkung von drei Oktalziffern, enden jedoch beim ersten Zeichen, das keine gültige Oktalziffer ist, wenn es früher angetroffen wird.

Hexadezimale Escape-Sequenzen haben keine Längenbeschränkung und enden beim ersten Zeichen, das keine gültige Hexadezimalziffer ist. Wenn der von einer einzelnen hexadezimalen Escape-Sequenz dargestellte Wert nicht in den Wertebereich des für diese Zeichenkette oder Zeichenkonstante verwendeten Zeichentyps passt (char, char8_t(seit C23), char16_t, char32_t(seit C11) oder wchar_t), ist das Ergebnis undefiniert.

Ein universeller Zeichenbezeichner in einem schmalen Zeichenkettenliteral oder einem 16-Bit-Zeichenkettenliteral(seit C11) kann mehr als einer Code-Einheit entsprechen, z. B. ist \U0001f34c 4 char-Code-Einheiten in UTF-8 (\xF0\x9F\x8D\x8C)und 2 char16_t-Code-Einheiten in UTF-16 (\xD83C\xDF4C)(seit C11).

(seit C99)

Ein universeller Zeichenbezeichner, der einem Code-Punkt 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 Fragezeichen-Escape-Sequenz \? wird verwendet, um zu verhindern, dass Trigraphen innerhalb von Zeichenkettenliteralen interpretiert werden: Eine Zeichenkette wie "??/" wird als "\" kompiliert, aber wenn das zweite Fragezeichen maskiert wird, wie in "?\?/", wird daraus "??/".

(bis C23)

[bearbeiten] 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?"

[bearbeiten] Referenzen

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

[bearbeiten] Siehe auch

C++ Dokumentation für Escape-Sequenzen