私はこのSO questionを見ていて、const intsと#definesを考えて、コンパイラがこれに対処できない理由を実際には理解していないことに気付きました。gccでconst intをcase式として使用できないのはなぜですか?
ことを私は6.8.4.2.3で述べISO-C99の仕様を読んで、なぜ次のコード
const int FOO = 10; int main(int argc, char** argv) { switch(argc) { case FOO: { printf("foo\n"); } default: { printf("default\n"); } } }
error: case label does not reduce to an integer constant
で結果に関して、誰かがいくつかの光を当てることができ各ケースのラベルの表現 は整数定数 となります。 の定数式は同じです スイッチ文は、変換後に同じ の値を持ちます。
私はなぜ大文字小文字の表現が定数でなければならないのか理解していますが、リテラルだけではコンパイラ(gcc 4.2.1)が幸せにならない理由は分かりません。
興味深いことに、gcc-4.3.4でコードが正しくコンパイルされて実行されているようです。http://ideone.com/n1bmIb 編集:Ah ..しかし、C++ではなくC. – GrahamS