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

ho visto una tale regola nella regola la sintassi del C, ma quando cerco di riprodurlo:Come usare i puntini di sospensione nell'istruzione case c?

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

Non riesce ...

+0

Perché pensi che i puntini di sospensione è un singolo periodo ? È il ... simbolo, cioè tre periodi sarebbe la mia prima ipotesi. – unwind

+1

l'attivazione di un 'float' quando la rappresentazione binaria è inaccurata è pericolosa. – Benoit

+0

possibile duplicato di [Intervallo di istruzioni switch Simulater/Generated in c] (http://stackoverflow.com/questions/4680502/simulater-generated-switch-statement-range-in-c) –

risposta

11

OK, questo implica un po 'di congetture da parte mia, ma sembrerebbe che si stia parlando di un'estensione gcc in C che consente di specificare intervalli nei casi switch.

Di seguito compila per me:

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

Annotare il ... e noti inoltre che non è possibile passare su un float.

8

ELLIPSIS significa ..., non .. La dichiarazione deve essere come:

#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;  
} 

BTW, questo è un non-standard extension of gcc. In C99 standard non riesco a trovare questa sintassi.

+0

Questo è davvero fantastico! – assem

+1

@assem Questo è piuttosto non portatile. Non farlo, usa se/else. –

+0

+1 Jim, @assem, Non essere attirato da questa cosa "carina". – Microkernel

10

Questo non è di serie C, vedere 6.8.4.2:

L'espressione di ciascun caso dell'etichetta deve essere una costante intera espressione

+0

+1 per quotare! –

Problemi correlati