Klocwork扩展规则KAST Checker的定制一例

本文介绍如何使用Klocwork 8.2通过定制KAST表达式来检测C/C++代码中的switch-case结构缺少break的情况。文章提供了两种具体规则案例,并分享了作者的实际测试经验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目的:检查代码中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中多试验一下,我的体会是节点的层次一定要对,但不一定从根上开始。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值