switch
labels must be constant expressions, they have to be evaluated at compile time. If you want to branch on run-time values, you must use an if
.
A const
-qualified variable не является выражением константы , это просто значение, которое вам не разрешено изменять.
Форма целочисленных константных выражений подробно описана в 6.6 (6) [C99 и черновик стандарта n1570 стандарта C2011]:
6 Целочисленное константное выражение должно иметь целочисленный тип и должно иметь только операнды
которые являются целыми константами, константами перечисления, символьными константами, sizeof
выражения, результаты которых представляют собой целые константы, выражения _Alignof
и плавающие
константы, которые являются непосредственными операндами приведения. Операторы Cast в целочисленной константе
выражение должно преобразовывать только арифметические типы в целые типы, за исключением как части
операнд к оператору sizeof
или _Alignof
.
Ограничение, в котором выражаются выражения sizeof
, результат которых является целочисленной константой, исключает выражения sizeof
, операнд которых является массивом переменной длины.