【发布时间】:2018-12-26 05:54:33
【问题描述】:
我正在将我在 CodeWarrior v5.2 中开发的应用程序迁移到使用 ARM C 编译器 v5.06 的 Keil uVision v5.25。
在我的代码中,我使用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);
但是,对每个布尔条件都执行此操作非常难看。我想知道是否有一种方法可以配置 Keil uVision / ARM 编译器(或修改我的代码)以不生成有关 bool 的警告,而不会完全禁用有关将枚举类型与其他类型混合的警告。
这些是我可用于配置编译器的选项:
【问题讨论】:
-
为什么不 typedef bool as int?
-
@Ctx 不是一个坏主意,这个“types.h”文件还有
typedef unsigned char boolean;以及TRUE和FALSE。将我所有的bools 切换为booleans 似乎是最好的主意。 -
我能问一下为什么这个问题被否决了吗?
-
1) 如果您不想这样做,那很好 - 其他人可能想查看该文件 2) 版权位于该文件的顶部,并表示只要版权是再分发就可以包括但不用于背书
-
C89 不是标准 C。它被编译为 C99(也不是标准,但可能是您使用专有商业编译器获得的最好的)。