我正在尝试用 C (armcc file.c) 编译以下代码:
typedef enum A
{
JANUARY,
FEBRUARY= 0xFFFFFFFF /* Warning seen on this line */
}A;
int main()
{
int max = 0xFFFFFFFF; /* No warning seen for this line*/
...
}
我只收到枚举赋值的警告,而不是整数变量赋值的警告,但在我看来,两者都不应看到警告。
警告如下:
我在这里错过了什么吗?
最佳答案
Int 赋值产生 -1 所以它在技术上是合法的。 Per Arm 规范枚举是使用最小整数类型实现的,因此会产生错误。
枚举
枚举类型的对象以包含枚举范围的最小整数类型实现。根据枚举中枚举器的范围,枚举的存储类型是以下第一个:
以这种方式实现枚举可以减少数据大小。命令行选项 --enum_is_int 强制枚举的基础类型至少与 int 一样宽。
关于c - 为什么 ARM 将 "0xFFFFFFFF"视为超出枚举的 "int"范围而不是赋值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51407170/