24. Константные выражения.

В нескольких местах в языке "C" требуются выражения, которые после вычисления становятся константами: после вариантного префикса case, в качестве границ массивов и в инициализаторах. В первых двух случаях выражение может содержать только целые константы, символьные константы и выражения sizeof, возможно связанные либо бинарными операциями


 + - * / . % & | << >> == != <> <= >=
либо унарными операциями

 - ~
либо тернарной операцией

 ?:
Круглые скобки могут использоваться для группировки, но не для обращения к функциям.

В случае инициализаторов допускается большая (ударение на букву о) свобода; кроме перечисленных выше константных выражений можно также применять унарную операцию & к внешним или статическим об'ектам и к внешним или статическим массивам, имеющим в качестве индексов константное выражение. Унарная операция & может быть также применена неявно, в результате появления неиндексированных массивов и функций. Основное правило заключается в том, что после вычисления инициализатор должен становится либо константой, либо адресом ранее описанного внешнего или статического об'екта плюс или минус константа.