加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 为什么ARM将“0xFFFFFFFF”视为枚举的“int”范围之外,而不

发布时间:2020-12-16 07:23:37 所属栏目:百科 来源:网络整理
导读:我想在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*/ ...} 我只收到枚举赋值的警告,而不是整数变量赋值,但在我
我想在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一样宽.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读