关于fallthrough
关于fallthrough
背景及问题
最近在从低版本的内核向高版本的内核移植驱动, 碰到了如下类似的报错:
error: this statement may fall through [-Werror=implicit-fallthrough=]
是与 fallthrough
相关的,查看代码,发现以前用的是:
/* fall through */
新版本的好像不行了,改为下面的就OK了:
fallthrough;
关于fallthrough
fallthrough属性主要用于switch
语句中
如果当前case
分支中不加break
,便会继续执行下一个case
分支的代码,而很多初学者容易犯这样的错误:在本应当在case
分支中加入break的时候却忘了加。于是编译器会针对这种情况输出Warning信息,提醒可能忘了加break
。但是有些时候我们为了实现一些特定的逻辑,不能加break
,但是又不想看到编译器报的警告,该怎么办呢?此时fallthrough
便派上用场了,在不加break
的地方加上fallthrough
不同的编译器版本,对于fallthrough
的写法要求是不一样的,例如以前gcc的版本,使用/* fall through */
,现在较新的(如gcc 9.4)对这种写法就会报错,需改为fallthrough;
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 DD'Notes!
评论