Estaba viendo esto SO question y llegué a pensar en const ints versus #defines y me di cuenta de que realmente no entiendo por qué el compilador no puede lidiar con esto. Podría alguien arrojar alguna luz sobre por qué el siguiente código¿Por qué gcc no permite un const int como expresión de caso?
const int FOO = 10;
int main(int argc, char** argv)
{
switch(argc)
{
case FOO: { printf("foo\n"); }
default: { printf("default\n"); }
}
}
resultados en
error: case label does not reduce to an integer constant
leí la especificación ISO-C99 que establece en 6.8.4.2.3 que
El la expresión de cada etiqueta de caso será una expresión entera constante y no habrá dos expresiones de expresiones constantes en el mismo interruptor declaración tendrá el mismo valor después de la conversión.
Entiendo por qué la expresión de caso debe ser constante, pero no por qué solo un literal hace feliz al compilador (gcc 4.2.1).
Curiosamente, ese código parece compilarse y ejecutarse correctamente en gcc-4.3.4: http://ideone.com/n1bmIb Editar: Ah ... pero solo como C++, no C. – GrahamS