Почему gcc не допускает использование const int в качестве выражения case?
Я смотрел на этоТАК вопрос и подумал о const ints и #defines и понял, что я нена самом деле не понимаю, почему компилятор не можетне иметь дело с этим. Может ли кто-то пролить свет на то, почему следующий код
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
Я прочитал спецификацию ISO-C99, которая утверждает в 6.8.4.2.3, что
Выражение каждой метки регистра должно быть выражением целочисленной константы, и никакие два выражения константы регистра в одном и том же операторе switch не должны иметь одинакового значения после преобразования.
Я понимаю, почему выражение case должно быть постоянным, но не то, почему только литерал делает компилятор (gcc 4.2.1) счастливым.