gpt4 book ai didi

c - 防止 Keil uVision 中 bool 值的 "enumerated type mixed with another type"警告

转载 作者:太空宇宙 更新时间:2023-11-04 04:58:50 24 4
gpt4 key购买 nike

我正在将我在 CodeWarrior v5.2 中开发的应用程序迁移到 Keil uVision v5.25,它使用 ARM C 编译器 v5.06。

在我的代码中,我一直使用 bool 来表示 bool 值,它在我项目的 types.h 文件中定义为:

typedef enum _bool 
{
false = 0,
true = 1
} bool;

当我尝试编译我的代码时,编译器生成关于我隐式地将比较结果分配给具有这种类型的变量的行的警告:

src\c\drivers\motor.c(168): warning:  #188-D: enumerated type mixed with another type
const bool motorStopped = timeSinceLastEvent > maxPulseWidth;
src\c\drivers\motor.c(169): warning: #188-D: enumerated type mixed with another type
const bool motorStalled = motorStopped && isMotorDriven();

我明白为什么会生成这些警告。我知道我可以通过显式转换为 bool 来抑制这些警告,例如:

const bool motorStopped = (bool)(timeSinceLastEvent > maxPulseWidth);

但是,对每个 bool 条件都这样做是非常难看的。我想知道是否有一种方法可以配置 Keil uVision/ARM 编译器(或修改我的代码)以不生成有关 bool 的警告,而无需完全禁用有关将枚举类型与其他类型混合的警告。

这些是我可以用来配置编译器的选项:

最佳答案

感觉很脏,但我通过修改 SDK 工具包附带的 types.h 文件解决了这个问题,使它包含 stdbool.h 而不是定义它自己的bool 类型。重新编译我的项目在使用 bool 的第三方代码或我自己的代码中均未产生任何警告/错误。

为了更好的衡量,我尝试以一种方式修改它,如果它在 C89 项目中编译,它仍然可以正常工作:

#if __STDC_VERSION__ >= 199901L
#include <stdbool.h>
#endif

// ...

#if __STDC_VERSION__ < 199901L
typedef enum _bool
{
false = 0,
true = 1
} bool;
#endif

关于c - 防止 Keil uVision 中 bool 值的 "enumerated type mixed with another type"警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51399856/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com