目的:检查代码中case语句后面没有跟break的情况。
我是用Klocwork 8.2环境做的KAST表达式测试。
由于KAST中case与break属于同样的层级,因此需要考虑没有break的各种情况。
我这里定制了两条规则,可以识别下面两种情况。
第一条:前一个case语句有执行体,但没有break,就直接进入下一个case或default了。
//SwitchStmt/Stmt::CompoundStmt/Stmts::LabeledStmt/following-sibling::LabeledStmt
比如:
case 1:
printf("");
case 2:
...
第二条:多个case共用执行体的情况。
//SwitchStmt/Stmt::CompoundStmt/Stmts[*]::LabeledStmt/Stmt::LabeledStmt
如:
case 1:
case 2: ...
两条规则都试过了,可以的。
发布的话照着手册的指导就可以了。
官方手册上关于KAST表达式的语法不够规范,主要是关于限定、条件部分的说明太少,涉及到的东西没讲明白,例子也太简单。
尽量在Checker Studio中多试验一下,我的体会是节点的层次一定要对,但不一定从根上开始。