我正在尝试用 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 规范枚举是使用最小整数类型实现的,因此会产生错误。

枚举
枚举类型的对象以包含枚举范围的最小整数类型实现。根据枚举中枚举器的范围,枚举的存储类型是以下第一个:

  • unsigned char 如果不使用 --enum_is_int
  • 如果不使用 --enum_is_int
  • 签名字符
  • unsigned short 如果不使用 --enum_is_int
  • 如果不使用--enum_is_int ,则
  • 签名为short
  • 签名 int
  • unsigned int 除了带有 --strict
  • 的 C
  • 使用 --strict
  • 签署 long long 除了 C
  • unsigned long long 除了带有 --strict 的 C。

  • 以这种方式实现枚举可以减少数据大小。命令行选项 --enum_is_int 强制枚举的基础类型至少与 int 一样宽。

    关于c - 为什么 ARM 将 "0xFFFFFFFF"视为超出枚举的 "int"范围而不是赋值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51407170/

    10-11 22:05
    查看更多