Namensräume
Varianten
Aktionen

Ausdrücke

Von cppreference.com
< c‎ | Sprache

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 += b
a -= b
a *= b
a /= b
a %= b
a &= b
a |= b
a ^= b
a <<= b
a >>= b

++a
--a
a++
a--

+a
-a
a + b
a - b
a * b
a / b
a % b
~a
a & b
a | b
a ^ b
a << b
a >> b

!a
a && b
a || b

a == b
a != b
a < b
a > b
a <= b
a >= b

a[b]
*a
&a
a->b
a.b

a(...)
a, b
(type) a
a ? b : c
sizeof


_Alignof
(seit C11)
(bis C23)

alignof
(seit C23)

[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.)
  • Generische Auswahlen können unterschiedliche Ausdrücke ausführen, abhängig von den Typen der Argumente
(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

1) Konstanten und Literale (z. B. 2 oder "Hello, world")
2) Geeignet deklarierte Identifikatoren (z. B. n oder printf)
(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 _Alignof(bis C23)alignof(seit C23)-Operators, der steuernde Ausdruck einer generischen Auswahl und Größenangaben von VLAs, die Operanden von _Alignof(bis C23)alignof(seit C23) sind, sind ebenfalls Ausdrücke, die nicht ausgewertet werden.

(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