QAC中文网站 > 使用教程 > QAC抑制注释怎么添加 QAC抑制注释复扫后为什么仍然报错
QAC抑制注释怎么添加 QAC抑制注释复扫后为什么仍然报错
发布时间:2026/07/30 18:34:53

  QAC扫描结果中,有些消息经过评审后可以按偏差处理。这时可以在源码中加入抑制注释。不过,注释写上了不代表列表里一定完全看不到消息。编号、位置、分析配置和结果筛选有一项没对上,复扫后仍可能继续显示。

  一、QAC抑制注释怎么添加

 

  QAC支持注释、Pragma、Dashboard和Baseline等多种抑制方式。源码中的抑制注释适合处理范围明确、已经确认可以接受的单条诊断。

 

  1、先确认诊断消息编号

 

  抑制注释填写的是QAC诊断消息编号,不能直接把MISRA规则号照搬进去。

 

  ①在【Analysis Results】→【Diagnostics】中选中目标消息。

 

  ②记录【ID】或消息编号。

 

  ③查看消息关联的规则和具体代码行。

 

  ④确认问题经过评审,确实需要抑制。

 

  例如,界面显示消息编号为3200,注释中应填写3200。一个MISRA规则可能关联多条QAC消息,所以只看规则名称很容易填错。QAC结果面板会分别显示消息ID、严重级别、关联规则和代码位置。

 

  2、添加单条消息抑制

 

  常见的注释格式如下:

 

  value=read_register();/*PRQA S 3200#已评审的硬件寄存器访问*/

 

  也可以把注释放在对应语句前面:

 

  /*PRQA S 3200#接口约束要求保留该类型转换*/

 

  result=(uint16_t)raw_value;

 

  ①把注释放在产生诊断的语句附近。

 

  ②将3200替换成实际消息编号。

 

  ③在“#”后写明抑制原因或偏差记录编号。

 

  ④保存源码后重新分析该文件。

 

  原因说明别只写“忽略”或“已确认”。写清硬件约束、第三方接口、生成代码或偏差单编号,后面复审会轻松很多。

 

  3、抑制一段代码中的消息

 

  同一段代码连续出现相同消息时,可以使用开启和关闭标记控制范围。

 

  /*PRQA S 3200,4397++#第三方接口适配代码*/

 

  legacy_api_call();

 

  legacy_data_convert();

 

  /*PRQA S 3200,4397--*/

 

  ①在目标代码前加入带【++】的抑制注释。

 

  ②填写需要抑制的消息编号。

 

  ③在代码段末尾加入对应的【--】注释。

 

  ④检查开始和结束标记是否成对。

 

  ⑤重新分析并查看抑制范围。

 

  范围不要放得太大。为了处理两行旧代码,却把整个文件都压下去,后面新增的真实问题也可能被藏住。

 

  4、检查注释是否被识别

 

  复扫后可以让QAC显示已被抑制的诊断。注释抑制通常以橙色标记,这代表抑制已经生效,消息只是被设置为可见,并非仍处于活动状态。

 

  命令行查看时,也可以输出注释抑制结果:

 

  qacli view-P<项目目录>-m STDOUT-T COMMENT

 

  QAC默认不输出已抑制消息;加入【COMMENT】筛选后,这些结果会重新显示,方便检查注释是否命中。

 

  二、QAC抑制注释复扫后为什么仍然报错

 

  复扫后还看到红色或黄色消息,先看它究竟是“未抑制”,还是“已抑制但被显示”。这两种情况处理方向差很多。

 

  1、填写了规则号或错误消息号

 

  ①重新打开诊断详情。

 

  ②核对实际消息编号。

 

  ③检查编号前后是否多了字符或空格。

 

  ④一行出现多条消息时,分别填写对应编号。

 

  例如,同一条转换语句可能同时触发类型、范围和MISRA合规消息。只抑制其中一个编号,其他消息依然会保留,这很正常。

  2、注释位置没有覆盖诊断位置

 

  QAC按照分析后的代码位置匹配抑制。注释距离目标语句太远、放进了错误的条件分支,或者【++】与【--】范围写反,都可能无法命中。

 

  ①查看诊断对应的准确行号。

 

  ②把单条注释移到该语句同一行或紧邻位置。

 

  ③检查代码是否经过宏展开。

 

  ④重新保存并分析。

 

  别只看编辑器里“差不多在附近”。宏、条件编译和头文件展开后,QAC实际分析的位置可能和肉眼看到的不完全一样。

 

  3、当前界面显示了已抑制消息

 

  QAC可以主动显示【COMMENT】、【PRAGMA】、【BASELINE】等已抑制诊断。此时消息仍在列表中,但颜色和抑制类型已经变化。

 

  ①查看消息前是否标记【Comment suppression】。

 

  ②检查结果面板的抑制显示按钮。

 

  ③关闭【Show suppressed diagnostics】。

 

  ④对比【Active】与【Total】数量。

 

  【Total】包含检测到的全部消息,【Active】才更接近当前仍需处理的结果。两者数量不同,往往说明部分消息已经被抑制。

 

  4、文件没有重新完成分析

 

  QAC默认只重新分析发生变化的文件及其依赖项。源码没保存、项目结果仍是旧状态,或者复扫只运行了部分组件,列表就可能继续保留原结果。

 

  ①保存加入注释后的源文件。

 

  ②对目标文件执行【Save and Analyze File】。

 

  ③仍未变化时清理该文件的分析结果。

 

  ④重新执行完整文件分析。

 

  命令行需要彻底重跑时,可以使用:

 

  qacli analyze-P<项目目录>--file-based-analysis--clean

 

  该组合会先清理旧结果,再重新分析项目文件。

 

  5、复扫使用了另一套配置

 

  项目存在多个Configuration时,GUI、命令行和持续集成环境可能并未使用同一套配置。不同配置中的宏、RCF、CCT和文件范围不同,诊断位置也可能变化。

 

  ①查看当前激活的项目配置。

 

  ②核对本地与持续集成使用的配置名称。

 

  ③确认扫描的是同一分支和同一份源码。

 

  ④重新运行对应配置的分析。

 

  命令行可以通过【--config】指定配置。未指定时,QAC会使用默认配置。

 

  三、QAC抑制注释怎么管理更稳

 

  抑制的目标是保留经过批准的偏差,同时让真正新增的问题继续暴露出来。注释越具体,后续维护越省事。

 

  1、用抑制报告复核注释

 

  ①打开【Reports】。

 

  ②生成【Suppression Report】。

 

  ③检查已使用和未使用的抑制项。

 

  ④清理已经不再对应任何诊断的旧注释。

 

  QAC的【Suppression Report】会汇总被抑制的诊断,还可以检查头文件中的未使用抑制。

 

  2、旧项目优先考虑Baseline

 

  遗留代码中有成百上千条已评审消息时,不建议往源码里塞满注释。可以建立Baseline,让后续分析重点显示新增加的问题。

 

  Baseline会保存当时已有的诊断,并在后续分析中通过差异匹配继续抑制旧消息。它主要作用于结果查看,不会阻止分析器生成诊断。

  总结

 

  处理QAC抑制注释怎么添加QAC抑制注释复扫后为什么仍然报错,先核对消息编号和注释位置,再区分“仍在报错”与“已抑制但可见”。复扫没有变化时,还要检查文件保存、旧结果和项目配置。抑制原因写清楚,范围控制小一些,后续复审会省下不少时间。希望本文能为大家处理QAC抑制注释问题提供参考,如需进一步了解相关内容,可联系咨询。

135 2431 0251