Nathan Fellman
Nathan Fellman

Reputation: 127478

How can I tell gcc to warn (or fail) on switch/case statements without a break?

I have a complicated switch statement, and I forgot to put a break at the end of one of the cases. This is quite legal, and as a result I had a fall-through to the next case.

Is there any way to have gcc warn (or even better, fail) if I neglect to put a break statement?

I realize that there are many valid use cases (and I use them often in my code), as exemplified in this question, so obviously such a warning (or failure) would need a simple waiver so that I could easily say, "I do want to fall-through here."

Is there any way to tell gcc to do this?

Upvotes: 10

Views: 5594

Answers (6)

Dan Berindei
Dan Berindei

Reputation: 7194

GCC 7 has a warning enabled with -Wextra or -Wimplicit-fallthrough(=[1-5])?: https://developers.redhat.com/blog/2017/03/10/wimplicit-fallthrough-in-gcc-7/

Upvotes: 3

Greg Hewgill
Greg Hewgill

Reputation: 993403

This check is available in Cppcheck, a free static analyser for C and C++ code. The check is currently marked "experimental", so you will need to use the --experimental command line switch to turn it on.

This check warns against a nonempty case clause that falls through to the next case without a control flow statement such as break, continue, return, etc, unless there is a comment with wording such as // fall through immediately preceding the next case.

You can get an idea for the kinds of constructs this handles by having a look at the switchFallThroughCase test cases in the source code.

Upvotes: 4

Harman
Harman

Reputation: 1581

Short answer is no, there is no such flag in gcc to do that. Switch case is used for the fall through more often so that is why it does not make sense to have such a flag in gcc.

Upvotes: 0

Alexey Frunze
Alexey Frunze

Reputation: 62068

You could construct a regexp for grep/perl/emacs/etc to find all places where there's no break before case.

Upvotes: 1

fazo
fazo

Reputation: 1827

I just went through gcc options, and there is none that will at least give you a notice. There are -Wswitch, -Wswitch-default and -Wswitch-enum ( http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#Warning-Options ), but none of them will work for you.

my best bet would be to use 'else if' statements

Upvotes: 2

Vsevolod Dyomkin
Vsevolod Dyomkin

Reputation: 9451

There's a discussion about such a feature (-Wswitch-break) at http://gcc.gnu.org/bugzilla/show_bug.cgi?id=7652. But it doesn't seem to be implemented yet

Upvotes: 6

Related Questions