Expressions
Ein Ausdruck ist eine Sequenz von Operatoren und ihren Operanden , die eine Berechnung spezifiziert.
Die Auswertung von Ausdrücken kann ein Ergebnis erzeugen (z.B. ergibt die Auswertung von 2 + 2 das Ergebnis 4 ), kann Nebeneffekte verursachen (z.B. sendet die Auswertung von printf ( "%d" , 4 ) das Zeichen '4' an den Standardausgabestrom), und kann Objekte oder Funktionen bezeichnen.
Inhaltsverzeichnis |
Allgemein
- Wertkategorien (Lvalue, Nicht-Lvalue-Objekt, Funktionsbezeichner) klassifizieren Ausdrücke nach ihren Werten
- Auswertungsreihenfolge von Argumenten und Teilausdrücken spezifiziert die Reihenfolge, in der Zwischenergebnisse erhalten werden
Operatoren
| Häufige Operatoren | ||||||
|---|---|---|---|---|---|---|
| Zuweisung |
Inkrement
Dekrement |
Arithmetisch | Logisch | Vergleich |
Member-
Zugriff |
Sonstige |
|
a
=
b
|
++
a
|
+
a
|
!
a
|
a
==
b
|
a
[
b
]
|
a
(
...
)
|
- Operator-Präzedenz definiert die Reihenfolge, in der Operatoren an ihre Argumente gebunden werden
- alternative Darstellungen sind alternative Schreibweisen für einige Operatoren
Konvertierungen
- Implizite Konvertierungen erfolgen, wenn die Typen von Operanden nicht den Erwartungen der Operatoren entsprechen
- Casts können verwendet werden, um Werte explizit von einem Typ in einen anderen umzuwandeln.
Sonstiges
- konstante Ausdrücke können zur Compilezeit ausgewertet werden und in Compilezeit-Kontexten verwendet werden ( nicht-VLA (seit C99) Array-Größen, statische Initialisierer, etc)
|
(seit C11) |
|
(seit C99) |
Primäre Ausdrücke
Die Operanden jedes Operators können andere Ausdrücke sein oder sie können primäre Ausdrücke sein (z.B. in 1 + 2 * 3 sind die Operanden von operator+ der Teilausdruck 2 * 3 und der primäre Ausdruck 1 ).
Primäre Ausdrücke sind einer der Folgenden:
| (seit C11) |
Jeder Ausdruck in Klammern wird ebenfalls als primärer Ausdruck klassifiziert: Dies gewährleistet, dass die Klammern eine höhere Priorität als jeder Operator haben.
Konstanten und Literale
Konstante Werte bestimmter Typen können im Quellcode eines C-Programms mittels spezieller Ausdrücke eingebettet werden, die als Literale (für Lvalue-Ausdrücke) und Konstanten (für Nicht-Lvalue-Ausdrücke) bekannt sind.
- Integer-Konstanten sind dezimale, oktale oder hexadezimale Zahlen vom Ganzzahltyp.
- Zeichenkonstanten sind einzelne Zeichen vom Typ int , die für die Konvertierung in einen Zeichentyp geeignet sind, oder vom Typ char8_t , (since C23) char16_t , char32_t , oder (since C11) wchar_t
- Gleitkommakonstanten sind Werte vom Typ float , double , oder long double
|
(seit C23) |
- String-Literale sind Zeichenfolgen vom Typ char [ ] , char8_t [ ] (seit C23) , char16_t [ ] , char32_t [ ] , (seit C11) oder wchar_t [ ] , die nullterminierte Zeichenketten repräsentieren
|
(seit C99) |
Nicht ausgewertete Ausdrücke
Die Operanden des sizeof Operators sind Ausdrücke, die nicht ausgewertet werden (sofern es sich nicht um VLAs handelt) (seit C99) . Daher führt size_t n = sizeof ( printf ( "%d" , 4 ) ) ; zu keiner Konsolenausgabe.
|
Die Operanden des
|
(seit C11) |
Referenzen
- C23-Standard (ISO/IEC 9899:2024):
-
- 6.5 Ausdrücke (p: TBD)
-
- 6.6 Konstante Ausdrücke (p: TBD)
- C17-Standard (ISO/IEC 9899:2018):
-
- 6.5 Ausdrücke (S: 55-75)
-
- 6.6 Konstante Ausdrücke (S: 76-77)
- C11-Standard (ISO/IEC 9899:2011):
-
- 6.5 Ausdrücke (S: 76-105)
-
- 6.6 Konstante Ausdrücke (S: 106-107)
- C99-Standard (ISO/IEC 9899:1999):
-
- 6.5 Ausdrücke (S. 67-94)
-
- 6.6 Konstante Ausdrücke (S. 95-96)
- C89/C90 Standard (ISO/IEC 9899:1990):
-
- 3.3 AUSDRÜCKE
-
- 3.4 KONSTANTE AUSDRÜCKE
Siehe auch
|
C++ Dokumentation
für
Expressions
|