В нескольких местах в языке "C" требуются выражения, ко-
торые после вычисления становятся константами: после вариан-
тного префикса CASE, в качестве границ массивов и в инициа-
лизаторах. В первых двух случаях выражение может содержать
только целые константы, символьные константы и выражения
SIZEOF, возможно связанные либо бинарными операциями
+ - * / . % & \! Ч << >> == 1= <> <= >=
либо унарными операциями
- \^
либо тернарной операцией ?:
Круглые скобки могут использоваться для группировки, но не
для обращения к функциям.
В случае инициализаторов допускается большая (ударение
на букву о) свобода; кроме перечисленных выше константных
выражений можно также применять унарную операцию & к внешним
или статическим объектам и к внешним или статическим масси-
вам, имеющим в качестве индексов константное выражение.
Унарная операция & может быть также применена неявно, в ре-
зультате появления неиндексированных массивов и функций. Ос-
новное правило заключается в том, что после вычисления ини-
циализатор должен становится либо константой, либо адресом
ранее описанного внешнего или статического объекта плюс или
минус константа.