我想在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*/
...
}
我只收到枚举赋值的警告,而不是整数变量赋值,但在我看来,两者都没有警告.
警告如下:
Warning:
#66-D
: enumeration value is out of “int” range
FEBRUARY= 0xFFFFFFFF
我在这里错过了什么吗?
最佳答案 Int赋值生成-1所以它在技术上是合法的. Per Arm spec enum使用最小整数类型实现,因此会产生错误.
枚举
枚举类型的对象以包含枚举范围的最小整数类型实现.根据枚举中枚举数的范围,枚举的存储类型是以下第一个:
> unsigned char如果不使用–enum_is_int
>如果不使用–enum_is_int,则为signed char
>如果不使用–enum_is_int,则为unsigned short
>如果不使用–enum_is_int,则签名为short
>签署int
>带有–strict的C以外的unsigned int
>使用–strict签署除C以外的长队长
>除了带有–strict的C之外的unsigned long long.
以这种方式实现枚举可以减少数据大小.命令行选项–enum_is_int强制枚举的基础类型至少与int一样宽.