Wie man einen expliziten Fall-Through in C durchführt

Lesezeit: 2 Minuten

Benutzer-Avatar
dlasalle

Die neueren Versionen von gcc bieten die Wimplicit-fallthrough, was für die meisten switch-Anweisungen großartig ist. Ich habe jedoch eine switch-Anweisung, bei der ich Fallthroughs von allen case-Anweisungen zulassen möchte.

Gibt es eine Möglichkeit, explizit durchzufallen? Ich würde es vorziehen zu vermeiden, mit kompilieren zu müssen Wno-implicit-fallthrough für diese Datei.

BEARBEITEN: Ich suche nach einer Möglichkeit, den Sturz explizit zu machen (falls möglich), um die Warnung nicht über einen Compiler-Schalter oder ein Pragma auszuschalten.

  • Vielleicht ist es das, was Sie wollen.

    – Reisfeld

    13. Juni 2017 um 2:29 Uhr

  • Ich habe das gleiche gefunden. stackoverflow.com/questions/3378560/…

    – Ninja im Ruhestand

    13. Juni 2017 um 2:31 Uhr

  • Schauen Sie sich die Beschreibung an -Wimplicit-fallthrough in der GCC-Dokumentation? Es wird keinen Nicht-Erweiterungsmechanismus geben – das ganze Problem ist nur Erweiterung.

    – Jonathan Leffler

    13. Juni 2017 um 4:54 Uhr


Benutzer-Avatar
Sergej Kalinitschenko

Verwenden __attribute__ ((fallthrough))

switch (condition) {
    case 1:
        printf("1 ");
        __attribute__ ((fallthrough));
    case 2:
        printf("2 ");
        __attribute__ ((fallthrough));
    case 3:
        printf("3\n");
        break;
}

  • Beachten Sie auch, dass das Obige gcc-spezifisch ist. Auch für C++ gibt es seit C++17 eine standardisierte Schreibweise: [[fallthrough]];

    – wer

    10. Juli 2018 um 9:01 Uhr


Benutzer-Avatar
Ciro Santilli OurBigBook.com

GCC-Fallghrough-Zauberkommentare

Sie sollten dies nicht verwenden, wenn Sie es vermeiden können, es ist verrückt, aber gut zu wissen:

int main(int argc, char **argv) {
    (void)argv;
    switch (argc) {
        case 0:
            argc = 1;
            // fall through
        case 1:
            argc = 2;
    };
}

verhindert die Warnung auf GCC 7.4.0 mit:

gcc -Wall -Wextra main.c

man gcc beschreibt, wie unterschiedliche Kommentare abhängig vom Wert erkannt werden können oder nicht:

-Wimplicit-fallthrough=n

C++17 [[fallthrough]] Attribut

C++17 hat dafür eine standardisierte Syntax: GCC 7, -Wimplicit-fallthrough warnings, and portable way to clear them?

  • Danke für die magischen Kommentare. Es hat tatsächlich funktioniert. Mein Code muss auch abwärtskompatibel mit c ++ 03 sein und __attribute__ ((fallthrough)) hat nicht funktioniert. Die Kommentare funktionierten wie Magie 🙂

    – Rahul Sreeram

    7. Mai 2020 um 12:01 Uhr


Sie sollten in der Lage sein, zu verwenden GCC-Diagnose-Pragmas um diese spezielle Warnung für Ihre Quelldatei oder einen Teil einer Quelldatei zu deaktivieren. Versuchen Sie, dies an den Anfang Ihrer Datei zu setzen:

#pragma GCC diagnostic ignored "-Wimplicit-fallthrough"

  • Vielen Dank!! Nur diese Antwort funktioniert auf Android JNI.

    – Zhou Hongbo

    15. Juni um 9:35 Uhr

1370750cookie-checkWie man einen expliziten Fall-Through in C durchführt

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

Privacy policy