我有一个复杂的switch
语句,并且我忘记在其中一个case
结尾处放置了break
语句。这是完全合法的,结果导致我向下执行到下一个case
。
是否有任何方法可以让gcc警告(或者更好的是,失败),如果我忽略了放置break
语句?
我意识到有很多有效的用例(我经常在我的代码中使用它们),就像在这个问题中所展示的一样,因此显然这样的警告(或者失败)需要一个简单的豁免条款,以便我可以轻松地说,“我确实想要在这里执行下去。”
是否有任何方法可以告诉gcc这样做?
我有一个复杂的switch
语句,并且我忘记在其中一个case
结尾处放置了break
语句。这是完全合法的,结果导致我向下执行到下一个case
。
是否有任何方法可以让gcc警告(或者更好的是,失败),如果我忽略了放置break
语句?
我意识到有很多有效的用例(我经常在我的代码中使用它们),就像在这个问题中所展示的一样,因此显然这样的警告(或者失败)需要一个简单的豁免条款,以便我可以轻松地说,“我确实想要在这里执行下去。”
是否有任何方法可以告诉gcc这样做?
关于这样一个功能(-Wswitch-break)的讨论在http://gcc.gnu.org/bugzilla/show_bug.cgi?id=7652上进行。但似乎还没有实现。
--experimental
命令行开关来启用它。break
、continue
、return
等),除非在下一个case
之前有一个注释,其中包含类似于// fall through
的措辞。switchFallThroughCase
测试用例来了解此处理的构造类型。GCC 7启用了一个警告,需要使用-Wextra
或-Wimplicit-fallthrough(=[1-5])
参数: https://developers.redhat.com/blog/2017/03/10/wimplicit-fallthrough-in-gcc-7/
我刚才浏览了gcc的选项,没有任何选项能够至少提醒你。 有 -Wswitch、-Wswitch-default 和 -Wswitch-enum(http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#Warning-Options),但是它们都不适用于你。
我最好的建议是使用“else if”语句。
case
之前有break
的地方。简短的回答是否定的,gcc中没有这样的标志来实现。Switch case通常用于fall through,因此在gcc中使用这样的标志是没有意义的。
gcc
对这个特性的支持仍在进行中,但是clang有-Wimplicit-fallthrough。 - Shafik Yaghmour