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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.