2013-07-17 7 views
6

Widziałem niektóre kodu c tak: int czek = 10:co oznacza ta składnia znacznika switcha w C?

switch(check) { 
      case 1...9: printf("It is 2 to 9");break; 
      case 10: printf("It is 10");break; 
} 

co to case 1...9: oznacza? czy to jest standardowe?

+0

dziękuję człowieku, zasadniczo mogę zgadnąć, co to znaczy, ale muszę się potwierdzić i wiedzieć, czy to jest standardowe? – user2131316

+1

@ user2131316 Jak zauważyłem poniżej, możesz użyć 'gcc -std = c99 -pedantic', aby sprawdzić w stosunku do określonego standardu –

Odpowiedz

7

Jest to rozszerzenie GNU C o nazwie zakres obudowy.

http://gcc.gnu.org/onlinedocs/gcc/Case-Ranges.html

Jak zaznaczono w dokumencie, musisz umieścić przestrzenie pomiędzy niską i wysoką wartość zakresu.

case 1 ... 9: 
    statement; 

odpowiada:

case 1: 
case 2: 
case 3: 
case 4: 
case 5: 
case 6: 
case 7: 
case 8: 
case 9: 
    statement; 
+0

ok, dziękuję, ale to GNU C jest standardem C lub czy jest obsługiwane przez C99 lub co? – user2131316

+0

O ile mogę powiedzieć "1 ... 9" jest błąd składni, musi być spacja. –

+0

@ user2131316 GNU C nie jest C. Jest to rozszerzenie do C. – ouah

1

To gcc extension, że najłatwiejszym sposobem zwykle dowiedzieć się tego z gcc przynajmniej jest użycie -pedantic argument:

gcc -pedantic 

będzie ostrzec:

warning: range expressions in switch statements are non-standard [-pedantic] 

a jeśli chciał sprawdzić przed określonym standardzie, np c99, to zrobić w następujący sposób:

gcc -std=c99 -pedantic 

Także to nie jest poprawne:

case 1...9: 

trzeba przestrzenie między kropkami i numery:

case 1 ... 9: 

jak zauważono w document:

Uważaj: zapisuj spacje wokół ..., w przeciwnym razie może być źle przeanalizowany, gdy użyjesz go z wartościami całkowitymi.