Wertebereich in switch / case Anweisung

Gast #6168618
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
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
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
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
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

Eine eigene Frage? Dieser Thread ist über 6 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.