• MDK-Keil AC6 Compiler屏蔽特定警告


    最近在使用STM32CubeMX生成MDK工程是,使用了 AC6 版本的编译器进行编译代码,然后发现了一些警告,但是在 AC5 版本下编译又正常。于是研究了下怎么屏蔽特定的警告,这里记录一下。

    1. Keil AC6屏蔽特定警告

    遇到的警告如下:

    在这里插入图片描述

    这里说,这个表达式的返回值没有被使用。这个警告在 AC5 版本编译器是不会出现的,但是使用AC6版本编译器就出现了,而且是ST提供的库函数引入的警告。

    要消除这个警告,需要去查找 ARM C/C++ AC6版本的编译器用户文档,它的官网如下:

    https://developer.arm.com/documentation/101407/0538/Dialogs/Project/Options/Compiler/Arm-C-C----AC6–Compiler

    下面的描述是AC6的文档描述:

    # 所有警告— 是 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 类似警告— 显示 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 及更高版本)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    大概意思就是,可以在 Keil 的配置选项中配置: -Wno-xxx 这样格式的命令,就可以忽略某种警告了。xxx 指的就是警告的类型,比如上面我截图遇到的警告 [-Wunused-value]

    要忽略这个警告,那么只要在Keil的配置界面添加 :-Wno-unused-value 这条命令即可。

    在这里插入图片描述

    又比如说,下面的宏定义重复定义了的警告:

    在这里插入图片描述

    那么我们输入: -Wno-macro-redefined 这条命令,就可以忽略宏定义重复定义的警告了。

    用法总结:

     -Wno-<警告类型>
    
    • 1

    这个警告类型我们可以看编译器给出的警告类型。

    2. Keil AC5屏蔽特定警告

    AC5版本编译器屏蔽特定警告的方式,有点区别。只要在Keil的配置选项中添加下面的指令:

    --diag_suppress=<警告码>
    
    • 1

    这个警告码,编译器会给出的,比如我下面的编译警告,说我的宏定义重复定义了,还要变量c定义了,但是从来都没有使用。编译器给出的警告码就是 47 和 550,如下图:

    在这里插入图片描述

    如果想忽略的话,那么就可以填写如下指令:

    --diag_suppress=47 --diag_suppress=550
    
    • 1

    3. IAR屏蔽特定警告

    IAR编译器警告如下:

    在这里插入图片描述

    说我这里有变量定义了没有使用,还有宏定义重名了。

    IAR工程屏蔽特定警告方法,只要在工程配置填入所需要屏蔽的警告类型就行了,比如上面报的警告类型,Pa181 和 Pe177 ,那么在工程配置如下:

    在这里插入图片描述

    这样就能屏蔽IAR工程的特定警告了。

  • 相关阅读:
    【Javascript】运算符(赋值,算术,自增,自减)
    大三0基础 java学习求助?
    如何使用 apt-get 安装特定版本的软件包
    前端面试题——CSS 高频
    文本格式清理工具 TextSoap mac中文版软件特色
    多线程批量下载ERA5逐日数据
    亚马逊卖家必看:测评补单提升店铺排名和转化率的有效方式
    4-爬虫-selenium(等待元素加载、元素操作、操作浏览器执行js、切换选项卡、前进后退异常处理)、xpath、动作链
    计算机毕业设计django基于python街区医院管理系统
    NLP(1)--NLP基础与自注意力机制
  • 原文地址:https://blog.csdn.net/luobeihai/article/details/132769655