Wertebereich in switch / case Anweisung

Gast #6168618
Lesenswert?

Hallo,

ich bin gerade etwas erstaunt und wollte mal fragen, wo im c oder c++ 
Standard definiert ist, dass folgender Code ausgeführt wird.
1
#include <stdio.h>
2

3
int main() {
4
    
5
    for(int x = 0; x <= 11; x++) {
6
        switch(x) {
7
            case 1 ... 5: printf("%d\n",x); break;
8
            case 6 ... 10: printf("%d\n",x); break;
9
            default: printf("Wert nicht im Range!\n"); break;
10
        }
11
    }
12
    
13
    return 0;
14
}

Getestet auf https://www.onlinegdb.com/

Bisher war mein Kenntnisstand, dass man nur auf einen Wert testen kann.

Danke und Gruß
Jörg
Gast #6169106
Lesenswert?

Hallo,

der Syntax ist an Pascal angelehnt. Ohne den "dritten" Punkt.

In C macht man(n) das eigentlich so:

switch(x){
   case 1 :
   case 2 :
   case 3 :
   case 5 : {
        tue irgendetwas
        return
   }
   case 7 :

usw. und so fort.

C Buch lesen.

Caio
#6169667
Lesenswert?

Jörg schrieb:
> Hallo Oliver,
>
> danke für den Hinweis.
>
> Heißt für mich garnicht erst dran gewöhnen. :-)

Wenn man gcc in den Standard-Modus versetzt (z.B. -std=c11), bricht er 
erstaunlicherweise nicht mit einem Fehler ab. Er gibt nicht mal eine 
Warnung aus. Erst wenn man zusätzlich noch -pedantic angibt, warnt er 
wenigstens.
1
$ gcc rangecase.c -std=c11 -pedantic
2
rangecase.c: In function ‘main’:
3
rangecase.c:7:13: warning: range expressions in switch statements are non-standard [-Wpedantic]
4
             case 1 ... 5: printf("%d\n",x); break;
5
             ^~~~
6
rangecase.c:8:13: warning: range expressions in switch statements are non-standard [-Wpedantic]
7
             case 6 ... 10: printf("%d\n",x); break;
8
             ^~~~
Gast #6169769
Lesenswert?

Rolf M. schrieb:
> Wenn man gcc in den Standard-Modus versetzt (z.B. -std=c11), bricht er
> erstaunlicherweise nicht mit einem Fehler ab. Er gibt nicht mal eine
> Warnung aus.

Bedeutet diese Option wirklich, dass gcc den Standard strikt befolgen 
soll oder legst Du nur fest, dass als Dialekt C11 (inklusive gcc 
spezifischer Erweiterungen) ok ist?
Gast #6169788
Lesenswert?

Michael F. schrieb:
> Bedeutet diese Option wirklich, dass gcc den Standard strikt befolgen
> soll

Ja.

Michael F. schrieb:
> oder legst Du nur fest, dass als Dialekt C11 (inklusive gcc spezifischer
> Erweiterungen) ok ist?

Nein, das wäre -std=gnu11

Rolf M. schrieb:
> Er gibt nicht mal eine Warnung aus. Erst wenn man zusätzlich noch
> -pedantic angibt, warnt er wenigstens.

Wie ist das bei -Wall -Wextra ? Sollte man eh immer nutzen...

Olaf schrieb:
> Sieht aber cool aus. Gleich mal angewoehnen. :-D

Nur weil etwas cool aussieht ist das nicht sofort sinnvoll... erst recht 
wenn es nicht Standard konform ist und nur mit dem GCC geht...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren