Я смотрел на этот ТАК вопрос и задумался о константных выражениях против #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) счастливым.