Konstante Ausdrücke in C
Ein konstanter Ausdruck wird nicht zur Laufzeit, sondern zur Kompilierzeit ausgewertet, Er kann überall dort eingesetzt werden, wo auch eine Konstante verwendet werden kann. Ergebnis des konstanten Ausdrucks muss eine Konstante sein, deren Wert für den betreffenden Typ darstellbar sein muss. Die Operanden eines konstanten Ausdrucks können ganzzahlige Konstanten, Zeichenkonstanten, Gleitkommakonstanten, Enumerationskonstanten, Typumwandlungen, sizeof
-Ausdrücke oder sonstige konstante Ausdrücke sein.
Syntax
constant-expression
:
conditional-expression
conditional-expression
:
logical-OR-expression
logical-OR-expression
?
expression
:
conditional-expression
expression
:
assignment-expression
expression
,
assignment-expression
assignment-expression
:
conditional-expression
unary-expression
assignment-operator
assignment-expression
assignment-operator
: einer von
=
*=
/=
%=
+=
-=
<<=
>>=
&=
^=
|=
Die Non-Terminals für den Strukturdeklarator, den Enumerator, den direkten Deklarator, den direkt-abstrakten Deklarator und die Anweisung mit Bezeichnung enthalten das Non-Terminal constant-expression
.
Ein integraler konstanter Ausdruck muss verwendet werden, um die Größe eines Bitfeldmembers einer Struktur, den Wert einer Enumerationskonstanten, die Größe eines Arrays oder den Wert einer case
-Konstanten anzugeben.
Konstante Ausdrücke, die in Präprozessoranweisungen verwendet werden, unterliegen mehreren Einschränkungen. Diese werden als eingeschränkte konstante Ausdrücke bezeichnet. Ein eingeschränkter konstanter Ausdruck darf keine sizeof
-Ausdrücke, Enumerationskonstanten, Typumwandlungen in beliebige Typen oder Gleitkommakonstanten enthalten. Dagegen kann der spezielle konstante Ausdruck defined (
identifier )
enthalten sein.