-Wimplicit-fallthrough 编译器标志自GCC 7以来一直存在,用于警告切换失败的情况,如果程序员无意中忘记向案例添加“break”语句,则可能导致潜在的 bug/意外行为。
#include <stdio.h>
int main(int argc, char *argv[])
{
int a = 0;
switch (a)
{
case 0:
printf("hit case=0\n");
[[fallthrough]];
case 1:
printf("hit case=1\n");
case 2:
printf("hit case 2\n");
default:
break;
}
}
在编译时加入-Wimplicit-fallthrough 选项,找出 switch 语句中没有 break 的地方。也可以在代码中使用 [[fallthrough]] 标记来提示不需要警告该处。
jiaming@jiaming-pc:~/Documents/test$ g++ -std=c++17 -Wimplicit-fallthrough lock3.cpp
lock3.cpp: In function ‘int main(int, char**)’:
lock3.cpp:12:19: warning: this statement may fall through [-Wimplicit-fallthrough=]
printf("hit case=1\n");
~~~~~~^~~~~~~~~~~~~~~~
lock3.cpp:14:9: note: here
case 2:
^~~~
|