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 is not a constant expression, it is merely a value you are not allowed to modify.
The form of integer constant expressions is detailed in 6.6 (6) [C99 and the n1570 draft of the C2011 standard]:
6 An integer constant expression shall have integer type and shall only have operands
that are integer constants, enumeration constants, character constants, sizeof
expressions whose results are integer constants, _Alignof
expressions, and floating
constants that are the immediate operands of casts. Cast operators in an integer constant
expression shall only convert arithmetic types to integer types, except as part of an
operand to the sizeof
or _Alignof
operator.
The restriction that only sizeof
expressions whose result is an integer constant are allowed rules out sizeof
expressions whose operand is a variable length array.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…