Ausdrücke
Ein Ausdruck ist eine Sequenz von Operatoren und ihren Operanden, die eine Berechnung spezifiziert.
Die Auswertung eines Ausdrucks kann ein Ergebnis liefern (z. B. die Auswertung von 2 + 2 liefert das Ergebnis 4), kann Nebeneffekte erzeugen (z. B. die Auswertung von printf("%d", 4) sendet das Zeichen '4' an den Standardausgabestrom) und kann Objekte oder Funktionen bezeichnen.
Inhalt |
[bearbeiten] Allgemein
- Wertkategorien (lvalue, non-lvalue object, function designator) klassifizieren Ausdrücke nach ihren Werten
- Auswertungsreihenfolge von Argumenten und Teilausdrücken gibt die Reihenfolge an, in der Zwischenergebnisse erzielt werden
[bearbeiten] Operatoren
| Häufige Operatoren | ||||||
|---|---|---|---|---|---|---|
| Zuweisung | Inkrement Dekrement |
Arithmetik | Logisch | Vergleich | Member Zugriff |
Sonstiges |
|
a = b |
++a |
+a |
!a |
a == b |
a[b] |
a(...) |
- Operatorrangfolge definiert die Reihenfolge, in der Operatoren an ihre Argumente gebunden werden
- alternative Darstellungen sind alternative Schreibweisen für einige Operatoren
[bearbeiten] Konvertierungen
- Implizite Konvertierungen finden statt, wenn die Typen der Operanden nicht mit den Erwartungen der Operatoren übereinstimmen
- Casts können verwendet werden, um Werte explizit von einem Typ in einen anderen zu konvertieren.
[bearbeiten] Sonstiges
- Konstante Ausdrücke können zur Kompilierzeit ausgewertet und in Kompilierzeitkontexten verwendet werden (Nicht-VLA(seit C99)-Array-Größen, statische Initialisierer usw.)
|
(seit C11) |
|
(seit C99) |
[bearbeiten] Primäre Ausdrücke
Die Operanden eines beliebigen 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 des Operators+ der Teilausdruck 2 * 3 und der primäre Ausdruck 1).
Primäre Ausdrücke sind alle der folgenden
| (seit C11) |
Jeder Ausdruck in Klammern wird ebenfalls als primärer Ausdruck klassifiziert: dies garantiert, dass die Klammern eine höhere Priorität als jeder Operator haben.
[bearbeiten] Konstanten und Literale
Konstante Werte bestimmter Typen können mithilfe spezieller Ausdrücke, bekannt als Literale (für lvalue-Ausdrücke) und Konstanten (für non-lvalue-Ausdrücke), in den Quellcode eines C-Programms eingebettet werden.
- Ganzzahlkonstanten sind Dezimal-, Oktal- oder Hexadezimalzahlen vom Ganzzahltyp.
- Zeichenkonstanten sind einzelne Zeichen vom Typ int, die für die Konvertierung in einen Zeichentyp geeignet sind, oder vom Typ char8_t,(seit C23) char16_t, char32_t, oder(seit C11) wchar_t
- Gleitkommakonstanten sind Werte vom Typ float, double oder long double
|
(seit C23) |
- Zeichenkettenliterale sind Zeichensequenzen vom Typ char[], char8_t[](seit C23), char16_t[], char32_t[],(seit C11) oder wchar_t[], die nullterminierte Zeichenketten darstellen
|
(seit C99) |
[bearbeiten] Nicht ausgewertete Ausdrücke
Die Operanden des sizeof-Operators sind Ausdrücke, die nicht ausgewertet werden (es sei denn, es sind VLAs)(seit C99). Somit führt size_t n = sizeof(printf("%d", 4)); keine Konsolenausgabe durch.
|
Die Operanden des |
(seit C11) |
[bearbeiten] Referenzen
- C23-Standard (ISO/IEC 9899:2024)
- 6.5 Ausdrücke (S. TBD)
- 6.6 Konstante Ausdrücke (S. 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
[bearbeiten] Siehe auch
| C++ Dokumentation für Ausdrücke
|