How to do an explicit fall-through in C
Solution 1
Use __attribute__ ((fallthrough))
switch (condition) {
case 1:
printf("1 ");
__attribute__ ((fallthrough));
case 2:
printf("2 ");
__attribute__ ((fallthrough));
case 3:
printf("3\n");
break;
}
Solution 2
GCC fallghrough magic comments
You should not use this if you can help it, it is insane, but good to know about:
int main(int argc, char **argv) {
(void)argv;
switch (argc) {
case 0:
argc = 1;
// fall through
case 1:
argc = 2;
};
}
prevents the warning on GCC 7.4.0 with:
gcc -Wall -Wextra main.c
man gcc
describes how different comments may or not be recognized depending on the value of:
-Wimplicit-fallthrough=n
C++17 [[fallthrough]]
attribute
C++17 got a standardized syntax for this: GCC 7, -Wimplicit-fallthrough warnings, and portable way to clear them?
Solution 3
You should be able to use GCC diagnostic pragmas to disable that particular warning for your source file or some portion of a source file. Try putting this at the top of your file:
#pragma GCC diagnostic ignored "-Wimplicit-fallthrough"
Related videos on Youtube
dlasalle
Software development consultant at Solid Lake, specializing in high-performance computing. Find my projects on GitHub.
Updated on June 05, 2022Comments
-
dlasalle about 2 years
The newer versions of gcc offer the
Wimplicit-fallthrough
, which is great to have for most switch statements. However, I have one switch statement where I want to allow fall throughs from all case-statements.Is there a way to do an explicit fall through? I'd prefer to avoid having to compile with
Wno-implicit-fallthrough
for this file.EDIT: I'm looking for a way to make the fall through explicit (if it's possible), not to turn off the warning via a compiler switch or pragma.
-
paddy about 7 yearsPerhaps this is what you want.
-
Retired Ninja about 7 yearsI found the same one. stackoverflow.com/questions/3378560/…
-
Jonathan Leffler about 7 yearsCheck out the description at
-Wimplicit-fallthrough
in the GCC documentation? There won't be any non-extension mechanism — the whole issue is all extension.
-
-
lwho almost 6 yearsAlso note that the above is gcc-specific. For C++ there is also a standardized way to write it since C++17: [[fallthrough]];
-
Rahul Sreeram about 4 yearsThanks for the magic comments. It actually worked.My code needs to be backward compatible with c++03 also and __attribute__ ((fallthrough)) didnt work. The comments worked like magic :)
-
Zhou Hongbo about 2 yearsThanks!! Only this answer works on android jni.