Namensräume
Varianten
Aktionen

Escape-Sequenzen

Von cppreference.com
< cpp‎ | Sprache
 
 
C++ Sprache
Allgemeine Themen
Schlüsselwörter
Escape-Sequenzen
Kontrollfluss
Bedingte Ausführungsaussagen
if
Iterationsanweisungen (Schleifen)
for
Bereichs-for (C++11)
Sprunganweisungen
Funktionen
Funktionsdeklaration
Lambda-Funktionsausdruck
inline-Spezifizierer
Dynamische Ausnahmespezifikationen (bis C++17*)
noexcept-Spezifizierer (C++11)
Ausnahmen
Namensräume
Typen
Spezifizierer
const/volatile
decltype (C++11)
auto (C++11)
constexpr (C++11)
consteval (C++20)
constinit (C++20)
Speicherdauer-Spezifizierer
Initialisierung
Ausdrücke
Alternative Darstellungen
Literale
Boolesch - Ganzzahl - Gleitkommazahl
Zeichen - String - nullptr (C++11)
Benutzerdefinierte (C++11)
Dienstprogramme
Attribute (C++11)
Typen
typedef-Deklaration
Typalias-Deklaration (C++11)
Umwandlungen
Speicherzuweisung
Klassen
Klassenspezifische Funktionseigenschaften
explicit (C++11)
static

Spezielle Member-Funktionen
Templates
Sonstiges
 
 

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

Die folgenden Escape-Sequenzen sind verfügbar

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 hörbarer Glockenton Byte 0x07 in ASCII-Kodierung
\b Rücktaste Byte 0x08 in ASCII-Kodierung
\f Seitenumbruch - 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 (1~3 Oktalziffern)
\o{n...} (seit C++23) Code-Einheit n... (beliebige Anzahl von Oktalziffern)
\xn... beliebiger Hexadezimalwert Code-Einheit n... (beliebige Anzahl von Hexadezimalziffern)
\x{n...} (seit C++23)
Bedingte Escape-Sequenzen[1]
\c Implementierungsabhängig Implementierungsabhängig
Universelle Zeichenbezeichner
\unnnn beliebiger Unicode-Wert;
kann mehrere Code-Einheiten ergeben
Codepunkt U+nnnn (4 Hexadezimalziffern)
\u{n...} (seit C++23) Codepunkt U+n... (beliebige Anzahl von Hexadezimalziffern)
\Unnnnnnnn Codepunkt U+nnnnnnnn (8 Hexadezimalziffern)
\N{NAME} (seit C++23) beliebiges Unicode-Zeichen Zeichen, benannt durch NAME (siehe unten)
  1. Bedingte Escape-Sequenzen werden bedingt unterstützt. Das Zeichen c in jeder bedingten Escape-Sequenz ist ein Mitglied des Grundlegenden Quellzeichensets(bis C++23)Grundlegenden Zeichensatzes(seit C++23), das nicht das Zeichen ist, das dem \ in einer anderen Escape-Sequenz folgt.

Inhalt

[bearbeiten] Bereich von universellen Zeichenbezeichnern

Wenn ein universeller Zeichenbezeichner einem Codepunkt entspricht, der nicht 0x24 ($), 0x40 (@) oder 0x60 (`) ist und kleiner als 0xA0 ist, ist das Programm schlecht geformt. Mit anderen Worten, Mitglieder des Grundlegenden Quellzeichensets und Steuerzeichen (in den Bereichen 0x0-0x1F und 0x7F-0x9F) können nicht in universellen Zeichenbezeichnern ausgedrückt werden.

(bis C++11)

Wenn ein universeller Zeichenbezeichner, der einem Codepunkt eines Mitglieds des Grundlegenden Quellzeichensets oder von Steuerzeichen entspricht, außerhalb eines Zeichen- oder Zeichenkettenliterals erscheint, ist das Programm schlecht geformt.

Wenn ein universeller Zeichenbezeichner einem Surrogat-Codepunkt entspricht (der Bereich 0xD800-0xDFFF, einschließlich), ist das Programm schlecht geformt.

Wenn ein universeller Zeichenbezeichner, der in einem UTF-16/32-Zeichenkettenliteral verwendet wird, keinem Codepunkt in ISO/IEC 10646 (der Bereich 0x0-0x10FFFF, einschließlich) entspricht, ist das Programm schlecht geformt.

(seit C++11)
(bis C++20)

Wenn ein universeller Zeichenbezeichner, der einem Codepunkt eines Mitglieds des Grundlegenden Quellzeichensets oder von Steuerzeichen entspricht, außerhalb eines Zeichen- oder Zeichenkettenliterals erscheint, ist das Programm schlecht geformt.

Wenn ein universeller Zeichenbezeichner keinem Codepunkt in ISO/IEC 10646 (der Bereich 0x0-0x10FFFF, einschließlich) entspricht oder einem Surrogat-Codepunkt entspricht (der Bereich 0xD800-0xDFFF, einschließlich), ist das Programm schlecht geformt.

(seit C++20)
(bis C++23)

Wenn ein universeller Zeichenbezeichner, der einem Skalarwert eines Zeichens im Grundlegenden Zeichensatz oder einem Steuerzeichen entspricht, außerhalb eines Zeichen- oder Zeichenkettenliterals erscheint, ist das Programm schlecht geformt.

Wenn ein universeller Zeichenbezeichner keinem Skalarwert eines Zeichens im Übersetzungszeichensatz entspricht, ist das Programm schlecht geformt.

(seit C++23)


Benannte universelle Zeichen-Escapes

\N{ n-char-sequence }
n-char-sequence - ein oder mehrere n-chars
n-char - ein Zeichen aus dem Übersetzungszeichensatz, außer der schließenden geschweiften Klammer } oder dem Zeilenumbruchzeichen

Ein universeller Zeichenbezeichner der obigen Syntax ist ein benannter universeller Charakter. Er bezeichnet das entsprechende Zeichen im Unicode-Standard (Kapitel 4.8 Name), wenn die n-char-sequence seinem Zeichennamen oder einem seiner Zeichennamen-Aliase vom Typ „control“, „correction“ oder „alternate“ entspricht; andernfalls ist das Programm schlecht geformt.

Diese Aliase sind in der Unicode Character Database unter NameAliases.txt aufgeführt. Keiner dieser Namen oder Aliase hat führende oder nachgestellte Leerzeichen.

Eine gültige n-char-sequence darf nur Großbuchstaben A bis Z, Ziffern, Leerzeichen und den Bindestrich-Minus enthalten. Andere Zeichen kommen nie in einem Unicode-Zeichennamen vor, und ihr Erscheinen in einer n-char-sequence macht das Programm immer schlecht geformt.

(seit C++23)

[bearbeiten] Anmerkungen

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

Das Zeilenumbruchzeichen \n hat eine besondere Bedeutung bei der Verwendung in der Textmodus-Ein-/Ausgabe: es wird in die betriebssystemspezifische Zeilenumbruchdarstellung konvertiert, normalerweise ein Byte oder eine Byte-Sequenz. Einige Systeme kennzeichnen ihre Zeilen stattdessen mit Längenfeldern.

Oktal-Escape-Sequenzen haben eine Grenze von drei Oktalziffern, enden aber am ersten Zeichen, das keine gültige Oktalziffer ist, wenn es früher angetroffen wird.

Hexadezimal-Escape-Sequenzen haben keine Längenbegrenzung und enden am ersten Zeichen, das keine gültige Hexadezimalziffer ist. Wenn der Wert, der von einer einzelnen Hexadezimal-Escape-Sequenz dargestellt wird, nicht in den Wertebereich passt, der von dem in dieser Zeichenkette verwendeten Zeichentyp dargestellt wird (char, char8_t, (seit C++20)char16_t, char32_t, (seit C++11) oder wchar_t), ist das Ergebnis undefiniert.

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

(seit C++11)

Die Fragezeichen-Escape-Sequenz \? wird verwendet, um zu verhindern, dass Trigraph-Sequenzen innerhalb von Zeichenkettenliteralen interpretiert werden: eine Zeichenkette wie "??/" wird als "\" kompiliert, aber wenn das zweite Fragezeichen maskiert wird, wie in "?\?/", wird daraus "??/". Da Trigraph-Sequenzen aus C++ entfernt wurden, ist die Fragezeichen-Escape-Sequenz nicht mehr notwendig. Sie wird zur Kompatibilität mit C++14 (und früheren Revisionen) und C beibehalten.(seit C++17)

Feature-Testmakro Wert Std Feature
__cpp_named_character_escapes 202207L (C++23) Benannte universelle Zeichen-Escapes

[bearbeiten] Beispiel

#include <iostream>
 
int main()
{
    std::cout << "This\nis\na\ntest\n\n";
    std::cout << "She said, \"Sells she seashells on the seashore?\"\n";
}

Ausgabe

This
is
a
test
 
She said, "Sells she seashells on the seashore?"

[bearbeiten] Fehlerberichte

Die folgenden Verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.

DR angewendet auf Verhalten wie veröffentlicht Korrigiertes Verhalten
CWG 505 C++98 Das Verhalten war undefiniert, wenn das Zeichen nach
einem Backslash nicht eines der in der Tabelle angegebenen war
wurde bedingt unterstützt
(semantisch implementierungsabhängig)

[bearbeiten] Siehe auch

C-Dokumentation für Escape-Sequenz