Suche…


Bemerkungen

Der Begriff Literal wird allgemein verwendet, um eine Folge von Zeichen in einem C-Code zu beschreiben, die einen konstanten Wert wie eine Zahl (z. B. 0 ) oder eine Zeichenfolge (z. B. "C" ) bezeichnet. Genau genommen verwendet der Standard die Termkonstante für Ganzzahlkonstanten, Fließkonstanten, Aufzählungskonstanten und Zeichenkonstanten, wobei der Begriff 'Literal' für String-Literale reserviert wird.

Literale können Präfixe oder Suffixe (aber nicht beide) enthalten. Dies sind zusätzliche Zeichen, die ein Literal starten oder beenden können, um seinen Standardtyp oder seine Darstellung zu ändern.

Ganzzahlige Literale

Ganzzahlliterale werden verwendet, um ganzzahlige Werte bereitzustellen. Es werden drei numerische Grundlagen unterstützt, die durch Präfixe gekennzeichnet sind:

Base Präfix Beispiel
Dezimal Keiner 5
Oktal 0 0345
Hexadezimal 0x oder 0X 0x12AB , 0X12AB , 0x12ab , 0x12Ab

Beachten Sie, dass diese Schreibweise kein Vorzeichen enthält. Ganzzahlige Literale sind daher immer positiv. So etwas wie -1 wird als Ausdruck behandelt, der ein ganzzahliges Literal ( 1 ) hat, das mit einem - negiert wird.

Der Typ eines Dezimal-Integer-Literal ist der erste Datentyp, der den Wert von int und long passen kann. long long wird seit C99 auch für sehr große Literale unterstützt.

Der Typ eines oktalen oder hexadezimalen Integer-Literal ist der erste Datentyp, der den Wert von int , unsigned , long und unsigned long . long long und unsigned long long werden seit C99 auch für sehr große Literale unterstützt.

Mit verschiedenen Suffixen kann der Standardtyp eines Literal geändert werden.

Suffix Erläuterung
L , l long int
LL , ll (seit C99) long long int
U , u unsigned

Die Suffixe U und L / LL können in beliebiger Reihenfolge und Fall kombiniert werden. Es ist ein Fehler, Suffixe zu duplizieren (z. B. zwei U Suffixe anzugeben), auch wenn diese unterschiedliche Fälle haben.

String-Literale

String-Literale werden verwendet, um Zeichenarrays anzugeben. Sie sind Zeichenfolgen, die in doppelte Anführungszeichen eingeschlossen sind (z. B. "abcd" und haben den Typ char* ).

Das Präfix L macht das Literal zu einem breiten Zeichenfeld vom Typ wchar_t* . Zum Beispiel L"abcd" .

Seit C11 gibt es andere Codierungspräfixe, ähnlich wie L :

Präfix Basistyp Codierung
keiner char Plattformabhängig
L wchar_t Plattformabhängig
u8 char UTF-8
u char16_t normalerweise UTF-16
U char32_t normalerweise UTF-32

Für die letzten beiden kann mit Feature-Test-Makros abgefragt werden, ob die Kodierung tatsächlich die entsprechende UTF-Kodierung ist.

Fließkomma-Literale

Fließkomma-Literale werden verwendet, um vorzeichenbehaftete reelle Zahlen darzustellen. Die folgenden Suffixe können verwendet werden, um den Typ eines Literal anzugeben:

Suffix Art Beispiele
keiner double 3.1415926 -3E6
f , F float 3.1415926f 2.1E-6F
l , L long double 3.1415926L 1E126L

Um diese Suffixe verwenden zu können, muss das Literal ein Fließkomma-Literal sein. Beispielsweise ist 3f ein Fehler, da 3 ein ganzzahliges Literal ist, während 3.f oder 3.0f korrekt sind. Bei einem long double wird empfohlen, zur besseren Lesbarkeit immer das Kapital L zu verwenden.

Zeichenliterale

Zeichenliterale sind ein spezieller Typ von Ganzzahl-Literalen, die zur Darstellung eines Zeichens verwendet werden. Sie sind in einfache Anführungszeichen eingeschlossen, z. B. 'a' und haben den Typ ' int . Der Wert des Literal ist ein ganzzahliger Wert, der dem Zeichensatz der Maschine entspricht. Sie erlauben keine Suffixe.

Das Präfix L vor einem Zeichenliteral macht es zu einem breiten Zeichen vom Typ wchar_t . Ebenso machen die Präfixe u und U seit C11 breite Zeichen vom Typ char16_t bzw. char32_t .

Bei der Darstellung bestimmter Sonderzeichen, beispielsweise eines nicht druckbaren Zeichens, werden Escape-Sequenzen verwendet. Escape-Sequenzen verwenden eine Folge von Zeichen, die in ein anderes Zeichen übersetzt werden. Alle Escape - Sequenzen bestehen aus zwei oder mehreren Zeichen, von denen die erste ist ein Backslash \ . Die Zeichen unmittelbar nach dem Backslash legen fest, unter welchem ​​Zeichenliteral die Sequenz interpretiert wird.

Fluchtabfolge Dargestellter Charakter
\b Rücktaste
\f Formularvorschub
\n Zeilenvorschub (neue Zeile)
\r Wagenrücklauf
\t Horizontale Registerkarte
\v Vertikale Registerkarte
\\ Backslash
\' Einfaches Anführungszeichen
\" Doppelte Anführungszeichen
\? Fragezeichen
\nnn Oktalwert
\xnn ... Hexadezimalwert
C89
Fluchtabfolge Dargestellter Charakter
\a Alarm (Piepton, Glocke)
C99
Fluchtabfolge Dargestellter Charakter
\unnnn Universeller Zeichenname
\Unnnnnnnn Universeller Zeichenname

Ein universeller Zeichenname ist ein Unicode-Codepunkt. Ein universeller Zeichenname kann mehreren Zeichen zugeordnet werden. Die Ziffern n werden als Hexadezimalziffern interpretiert. Je nach UTF - Codierung verwendet wird , in einem Codepunkt eine universelle Zeichennamensfolge führen kann, die aus mehreren Zeichen bestehen, anstelle einem einzigen normalen char Charakter.

Bei Verwendung der Zeilenvorschub-Escape-Sequenz in der Textmodus-E / A wird sie in die betriebssystemspezifische Zeilen- oder Bytefolge von Zeilenumbrüchen konvertiert.

Die Fragezeichen-Escape-Sequenz wird verwendet, um Trigraphen zu vermeiden. Zum Beispiel wird ??/ als Trigraph kompiliert, der ein Backslash-Zeichen '\' , aber bei Verwendung von ?\?/ Würde die Zeichenfolge "??/" .

Es können eine, zwei oder drei Oktalziffern n in der Escape-Folge des Oktalwerts stehen.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow