QAC中文网站 > 新手入门 > QAC预处理宏怎么配置 QAC预处理宏导致分析结果异常怎么办
QAC预处理宏怎么配置 QAC预处理宏导致分析结果异常怎么办
发布时间:2026/07/30 18:32:51

  QAC分析C/C++代码时,会先按当前宏定义完成预处理。宏值一旦和真实编译环境不同,条件分支、类型声明和函数实现都会跟着变化。遇到“QAC预处理宏怎么配置QAC预处理宏导致分析结果异常怎么办”,先对照构建命令,再检查QAC实际生成的预处理结果。

  一、QAC预处理宏怎么配置

 

  项目宏、编译器内置宏和产品变体宏,来源并不相同。配置时最好沿用真实构建参数,少靠手工补写。

 

  1、从实际构建中同步宏定义

 

  QAC需要同时获取源文件、头文件路径和编译命令中的宏定义。例如编译参数里的-DMACRO=1,会影响当前源文件及其包含的头文件。

 

  ①打开QAC项目。

 

  ②进入【项目属性】→【同步设置】。

 

  ③确认已选择与实际编译器匹配的CCT。

 

  ④设置宏定义参数标识,如GCC的-D或MSVC的/D。

 

  ⑤执行一次完整清理构建。

 

  ⑥点击【项目】→【同步】,重新采集编译参数。

 

  同步前要先清理工程。若项目已经是最新状态,构建过程没有真正调用编译器,QAC可能采集不到源文件、包含路径和宏定义。

 

  2、通过构建日志导入宏

 

  CI环境不方便直接监视构建时,可以把每个源文件的完整编译命令写入日志,再同步到QAC项目。

 

  ①生成包含源文件路径、-I和-D参数的构建日志。

 

  ②确认每条编译命令单独占一行。

 

  ③在命令行进入项目目录。

 

  ④执行以下命令:

 

  qacli sync-P<项目目录>--type BUILD_LOG<日志文件>

 

  ⑤同步完成后检查项目文件数量。

 

  ⑥重新执行分析。

 

  构建日志必须保留每个翻译单元自己的宏。只整理一份“公共宏列表”,很容易漏掉文件级参数和模块差异。

 

  3、在CCT中补充编译器宏

 

  编译器关键字、内置类型宏或特殊扩展无法从普通构建参数中取得时,可以在CCT生成脚本中加入额外定义。

 

  常见形式包括:

 

  -sd __interrupt=""

 

  -sd _XKEYCHECK="1"

 

  -sd __assume(a)=

 

  空字符串、无值宏和函数式宏的写法不同,不能全按名称=值处理。CCT还会记录编译器行为、类型映射和附加头文件等信息。

 

  ①复制现有CCT或Auto CCT过滤脚本。

 

  ②补充缺少的编译器预定义宏。

 

  ③保留原始文件,不要直接覆盖。

 

  ④为新配置填写清楚的版本名称。

 

  ⑤将项目切换到新CCT。

 

  ⑥选择少量源文件进行测试分析。

 

  项目功能开关尽量从构建命令同步。CCT更适合处理编译器本身固定存在的宏和语法扩展。

 

  二、QAC预处理宏导致分析结果异常怎么办

 

  宏配置异常常见表现是代码分支没有被分析、类型突然未定义、告警数量大幅变化,或者同一文件在本地与CI中结果不同。

  1、检查宏名称和值

 

  ①打开出现异常的源文件。

 

  ②找到相关的#if、#ifdef和#elif。

 

  ③核对宏名称的大小写。

 

  ④检查宏值是0、1、空值还是未定义。

 

  ⑤确认命令行中没有重复定义。

 

  ⑥删除过期宏后重新同步。

 

  FEATURE=0和没有定义FEATURE并不是同一种状态。代码使用#ifdef FEATURE时,即使值是0,该分支仍可能被选中。

 

  2、排查构建变体混用

 

  Debug、Release、不同芯片和不同产品版本,往往使用不同宏组合。把几套参数塞进同一个配置,分析结果很容易失真。

 

  ①列出各构建变体使用的宏。

 

  ②为不同变体建立独立QAC配置。

 

  ③分别同步对应构建命令。

 

  ④检查源文件是否属于当前变体。

 

  ⑤运行分析时明确选择配置。

 

  多配置项目可通过--config指定分析配置;未指定时会使用默认配置。

 

  3、检查带空格和引号的宏

 

  函数式宏或字符串宏没有正确解析时,常会引发大面积语法错误。

 

  ①查看编译命令中的完整宏参数。

 

  ②核对括号、逗号和引号是否保留。

 

  ③检查【同步设置】中的引号解析方式。

 

  ④避免在脚本中重复转义。

 

  ⑤重新同步并只分析一份源文件。

 

  例如/DMAX(A,B)="A

 

  三、怎样确认QAC实际使用了正确的宏

 

  界面里看到宏已填写,还不算完成。最直接的办法,是查看QAC展开后的预处理文件。

 

  1、生成预处理源文件

 

  ①进入【分析】→【打开分析设置】。

 

  ②启用【为分析文件生成预处理源】。

 

  ③重新分析异常源文件。

 

  ④打开生成的.i文件。

 

  ⑤搜索关键宏对应的代码分支。

 

  ⑥与真实编译器的预处理结果进行比较。

 

  命令行也可以执行:

 

  qacli analyze-P<项目目录>-f--generate-preprocessed-source

 

  生成文件通常位于项目配置对应的输出目录中。

 

  2、修改配置后做干净分析

 

  ①保存新的宏和CCT配置。

 

  ②清理旧分析结果。

 

  ③重新同步工程。

 

  ④只分析一两个异常文件。

 

  ⑤确认结果正常后再跑全项目。

 

  ⑥比较修改前后的告警变化。

 

  若解析器仍然失败,可以生成支持分析包,其中会包含预处理文件和本次分析选项,方便继续定位。

  总结

 

  “QAC预处理宏怎么配置QAC预处理宏导致分析结果异常怎么办”的关键,是让QAC看到的编译条件与真实构建保持一致。宏、包含路径和构建变体对齐后,很多莫名其妙的类型错误和告警波动都会消失。希望本文能为大家配置和排查QAC预处理环境提供参考,如需进一步了解相关内容,欢迎联系咨询。

135 2431 0251