2011-03-16 6 views
5
CASE expr_no_commas ELLIPSIS expr_no_commas ':' 

vi una norma de este tipo en la regla de sintaxis de C, pero cuando intento reproducirlo:¿Cómo usar puntos suspensivos en la declaración de caso de c?

int test(float i) 
{ 
switch(i) 
{ 
    case 1.3: 
    printf("hi"); 
} 
} 

Falla ...

+0

¿Por qué cree que la elipsis es un solo período ? Es el ... símbolo, es decir, el tercer período sería mi primera suposición. – unwind

+1

encender un 'float' cuando la representación binaria es inexacta es peligroso. – Benoit

+0

posible duplicado de [Simulater/Rango de instrucción de conmutación generada en c] (http://stackoverflow.com/questions/4680502/simulater-generated-switch-statement-range-in-c) –

Respuesta

11

OK, esto implica un poco de conjeturas de mi parte, pero parece que estás hablando de una extensión gcc a C que permite especificar rangos en switch casos.

El siguiente se compila para mí:

int test(int i) 
{ 
    switch(i) 
    { 
    case 1 ... 3: 
    printf("hi"); 
    } 
} 

Nota del ... y tener en cuenta que no se puede cambiar en un float.

8

ELLIPSIS significa ..., no .. La declaración debe ser como:

#include <stdio.h> 

int main() { 
    int x; 
    scanf("%d", &x); 

    switch (x) { 
     case 1 ... 100: 
      printf("1 <= %d <= 100\n", x); 
      break; 
     case 101 ... 200: 
      printf("101 <= %d <= 200\n", x); 
      break; 
     default: 
      break; 
    } 

    return 0;  
} 

Por cierto, este es un non-standard extension of gcc. En el estándar C99 no puedo encontrar esta sintaxis.

+0

¡Esto es genial! – assem

+1

@assem Esto es bastante no portátil. No lo hagas, usa if/else. –

+0

+1 Jim, @assem, No te dejes atrapar por esta cosa "genial". – Microkernel

10

Esto no es estándar C, véase 6.8.4.2:

La expresión de cada etiqueta caso será una constante entera expresión

+0

+1 para cotizar! –

Cuestiones relacionadas