Wie man einen expliziten Fall-Through in C durchführt
Lesezeit: 2 Minuten
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.
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
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:
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