switch
Etykiety muszą być wyrażeniami stałymi, muszą być oceniane podczas kompilacji. Jeśli chcesz rozgałęzić w czasie wykonywania wartości, musisz użyć if
.
A-const
- zmienna kwalifikowana nie jest stałym ciągiem , jest to po prostu wartość, której nie wolno modyfikować.
Postać stałą całkowitą wyrażenia wyszczególniono 6,6 (6) [C99 oraz projekt n1570 standardu C2011]:
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.
zastrzeżeniem, że tylko sizeof
wyrażenia, których wynikiem jest stałą całkowitą wolno wykreśla wyrażenia sizeof
, których operandem jest tablica o zmiennej długości.
dzięki za jednoznaczną odpowiedź, będę użycie zamiast if. –
Cóż, 'const' nie jest stałym wyrażeniem całkowitym, ale co z' statyczną const'? – Cyan
@Cyan Nie w C (ostatnio wyglądałem). W innych językach rzeczy mogą się różnić,. –