对于ACC6警告部分,我们可以参考官Keil官方的说明。
打开链接之后,我们往下滑,可以看到关于警告的介绍
这里介绍了,用户可以设置5种警告显示类型,下图的软件界面
这种警告分别为:
- <unspecified> — 不添加编译器控件字符串。该行为取决于编译器默认值或在父 uVision 组级别上设置的选项,是默认设置。
- No Warnings —没有警告,不显示任何诊断信息。设置编译器控件字符串-W.
- All Warnings —显示所有警告, 是 uVision 的默认设置。显示编译器控制字符串中列出的所有诊断 Weverything 并排除 (-Wno-xxx):
-Weverything
-Wno-reserved-id-macro
-Wno-unused-macros
-Wno-documentation-unknown-command
-Wno-documentation
-Wno-reserved-identifier(适用于 Arm Compiler 6.17 及更高版本)- AC5-like Warnings—类似 AC5 的警告 ,显示 ARM 编译器 5 将显示的所有警告。可以禁止显示以下警告:
-Wno-missing-variable-declarations
-Wno-missing-prototypes
-Wno-missing-noreturn
-Wno-sign-conversion
-Wnonportable-include-path
-Wno-packed
-Wno-reserved-id-macro
-Wno-unused-macros
-Wno-documentation-unknown-command
-Wno-documentation
-Wno-license-management
-Wno-parentheses-equality
-Wno-reserved-identifier(适用于 Arm Compiler 6.17 及更高版本)- MISRA compatible — 显示除与 MISRA 规则冲突的警告之外的所有警告。
-Wno-covered-switch-default
-Wno-unreachable-code-break
-Wno-reserved-identifier(适用于 Arm 编译器 6.17 及更高版本)
一般我们配置成AC5-like Warnings
那么,我们要如何去忽略特定的警告呢?
第一步,屏蔽的警告是什么类型?
下图是一个中文编码的警告,就是我们在使用printf的时候,需要打印中文的时候,会出现以下警告,学习过单片机的朋友都知道,这个警告其实是不会影响系统运行的,可以忽略。
这里,我们可以轻易的知道,该警告类型为 : [-Winvalid-source-encoding]
第二步,如何去屏蔽警告?
对于ACC6编译器,我们使用 -Wno+警告类型 指令去屏蔽警告,具体操作如下
将[-Winvalid-source-encoding]警告类型去掉 ‘W’和括号,得到 -invalid-source-encoding
然后在前面加上 -Wno,于是得到 -Wno-invalid-source-encoding
!!!这里注意的是,如果前面已经有指令了,需要后面再插入指令的话,我们要加上一个空格,然后再继续添加我们的指令,否则会出错。
这时候,可以看到,警告消失了
下面是关于一些指令的简要解释:
-Wno-license-management
: 禁用与许可证管理相关的警告。-Wunused
: 报告未使用的变量、函数和参数。-Wuninitialized
: 报告未初始化的变量。-Wall
: 启用所有“有用”的警告。-Wextra
: 启用一些额外的编译器警告,这些警告不是-Wall
所包含的。-Wmissing-declarations
: 报告没有声明就使用的函数。-Wconversion
: 报告可能改变值的类型转换。-Wpointer-arith
: 报告与指针运算相关的潜在问题。-Wshadow
: 报告局部变量遮蔽全局变量或函数参数的情况。-Waggregate-return
: 报告返回结构体或联合体的函数,这可能导致不必要的内存拷贝。-Wfloat-equal
: 报告浮点数的直接相等比较,这通常是不安全的。