Sind Elipsen in Case-Anweisungen Standard C/C++

Lesezeit: 2 Minuten

Ich habe Code im Linux-Kernel durchsucht und bin auf die Aussagen wie gestoßen case '0' ... '9':

Um dies auszuprobieren, habe ich das folgende Testprogramm erstellt.

#include <iostream>

int main()
{
    const int k = 15;

    switch (k)
    {
    case 0 ... 10:
        std::cout << "k is less than 10" << std::endl;
        break;
    case 11 ... 100:
        std::cout << "k is between 11 and 100" << std::endl;
        break;
    default:    
        std::cout << "k greater than 100" << std::endl;
        break;
    }
}   

Das obige Programm wird kompiliert, obwohl ich noch nie zuvor auf die Auslassungen im Case-Anweisungskonstrukt gestoßen bin. Ist das Standard-C und C++ oder ist das eine GNU-spezifische Erweiterung der Sprache?

  • Ah, der Schwanengesang von Visual Basic.

    – Hans Passant

    8. Mai 2011 um 1:22 Uhr

  • Was bedeutet diese Syntax von switch case in C?

    – phuklv

    22. Januar 2020 um 7:24 Uhr

  • Beantwortet das deine Frage? Sind dreifache Punkte in einem Fall (Fall ‘0’ … ‘9’:) gültige C-Sprachwechselsyntax?

    – phuklv

    22. Januar 2020 um 7:24 Uhr

Benutzeravatar von wkl
wkl

Das ist die Fallbereich Erweiterung des GNU-C-Compilers, es handelt sich nicht um Standard-C oder C++.

Das ist eine Erweiterung. Kompilieren Sie Ihr Programm mit -pedantic gibt:

example.cpp: In function ‘int main()’:
example.cpp:9: error: range expressions in switch statements are non-standard
example.cpp:12: error: range expressions in switch statements are non-standard

clang gibt noch bessere Warnungen:

example.cpp:9:12: warning: use of GNU case range extension [-Wgnu]
    case 0 ... 10:
           ^
example.cpp:12:13: warning: use of GNU case range extension [-Wgnu]
    case 11 ... 100:
            ^

  • Jetzt frage ich mich, warum das pedantisch sein sollte. Ich nehme an – Wandshow gleich?

    – sehen

    7. Mai 2011 um 23:32 Uhr

  • @sehe, -Wall zeigt mir diese Warnungen/Fehler nicht an, wenn ich entweder clang oder gcc verwende.

    – Karl Norum

    7. Mai 2011 um 23:33 Uhr

  • Danke. Das ist erstaunlich, wenn man sieht, wie viel Wert auf die Einhaltung von Standards gelegt wird. Ich für meinen Teil habe nie davon geträumt, auch nur zu versuchen, ‘…’ in meiner switch-Anweisung zu verwenden 🙂

    – sehen

    7. Mai 2011 um 23:35 Uhr

Benutzeravatar von Jon Purdy
Jon Purdy

Dies ist eine GCC-Erweiterung von C, die in dieser Antwort auf eine im Grunde doppelte Frage erwähnt und bestätigt wurde in der GCC-Dokumentation.

1432780cookie-checkSind Elipsen in Case-Anweisungen Standard C/C++

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy