C Language
Literale für Zahlen, Zeichen und Zeichenfolgen
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 |
Fluchtabfolge | Dargestellter Charakter |
---|---|
\a | Alarm (Piepton, Glocke) |
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.