Постоянные выражения в C
Константное выражение вычисляется во время компиляции, а не во время выполнения, и может использоваться в любом месте, в котором возможно использование константы. При вычислении константного выражения должна получаться константа со значением в диапазоне представимых значений для этого типа. Операнды константного выражения могут быть целыми константами, символьными константами, константами с плавающей запятой, константами перечисления, приведениями типов, выражениями sizeof и другими константными выражениями.
Синтаксис
константное-выражение:
условное-выражениеусловное-выражение:
логическое-выражение-ИЛИвыражение-логического-ИЛИ**?** выражение**:** условное-выражение
выражение:
выражение-присваиваниявыражение**,** выражение-присваивания
выражение-присваивания:
условное-выражениеунарное-выражение оператор-присваивания выражение-присваивания
оператор-присваивания: один из следующих операторов:
= *= /= %= += –= <<= >>= &= ^= |=
Нетерминальные слова для декларатора структуры, перечислителя, прямого декларатора, прямого абстрактного декларатора и оператора с меткой содержат нетерминальное константное-выражение.
Для определения размера члена битового поля структуры, значения константы перечисления, размера массива или значения константы case должно использоваться целочисленное константное выражение.
На константные выражения, используемые в директивах препроцессора, накладываются дополнительные ограничения. Поэтому они называются "ограниченными константными выражениями". Ограниченное константное выражение не может содержать выражения sizeof, константы перечисления, приведения типов к любому типу или константы типа с плавающей запятой. Однако оно может содержать специальное константное выражение defined (identifier).