0
点赞
收藏
分享

微信扫一扫

C++17 中的 [[fallthrough]] 标记

​-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");
// [[fallthrough]];
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:
^~~~


举报

相关推荐

0 条评论