Escape sequences
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
|
Bereich universeller Zeichennamen
Wenn ein universeller Zeichenname einem Codepunkt entspricht, der nicht
|
(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
|
(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
|