Interruptor en la progtwigción en C

Hice este código sólo para fines de aprendizaje. Pero al hacerlo encontré un problema. Aquí x es un entero constante, todavía el comstackdor me está dando un error. Estoy usando el comstackdor gcc. Por favor explique cuál es la razón de este error y cómo evitarlo.

#include int main() { int const x = 10; int y = 20; switch(y) { case x: //error: case label does not reduce to an integer constant printf("value of x: %d\n",x); break; } } 

puede utilizar el preprocesador como solución alternativa:

 #define X 10 // ... case X: 

La gramática para una instrucción de cambio en C es la siguiente:

 selection-statement: switch ( expression ) statement labeled-statement: case constant-expression : statement default : statement 

Por lo tanto, solo puede utilizar expresiones constantes como “valor de caso”. La expresión constante no es lo mismo que la variable constante . En otras palabras, lo siento, pero no puedes hacer eso.

Es posible que sepa que x es una constante, pero el comstackdor no puede garantizarlo: aún es posible modificar x en C. Una forma es tomar su dirección (a través de un puntero) y eliminarla.

En C solo puedes activar tipos de integrales literales; Más formalmente, una expresión constante .

En este caso, debe usar una instrucción if porque el switch() C no toma una expresión. Se necesita una constante.

case declaraciones de case necesitan constantes. Podrías lograr algo similar a lo que estás haciendo con una macro.

 #define TEN 10 #include int main() { int const x = TEN; int y = 20; switch(y) { case TEN: //error: case label does not reduce to an integer constant printf("value of x: %d\n",x); break; } }