![C++17 中的 [[fallthrough]] 标记,第1张 C++17 中的 [[fallthrough]] 标记,第1张](/aiimages/C%2B%2B17+%E4%B8%AD%E7%9A%84+%5B%5Bfallthrough%5D%5D+%E6%A0%87%E8%AE%B0.png)
-Wimplicit-fallthrough 编译器标志自GCC 7以来一直存在,用于警告切换失败的情况,如果程序员无意中忘记向案例添加“break”语句,则可能导致潜在的 bug/意外行为。
#include
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条)