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

c 11 – 枚举值需要多少位?

发布时间:2020-12-16 07:15:36 所属栏目:百科 来源:网络整理
导读:#include stdint.henum state : uint8_t { NONE,USA,CAN,MEX};struct X { state st : 2; // compiles with uint8_t st : 2}; Clang 3.9.0编译成功. GCC 4.8.4和5.3.0抱怨: warning: ‘X::st’ is too small to hold all values of ‘enum state’ 谁是对的
#include <stdint.h>

enum state : uint8_t {
    NONE,USA,CAN,MEX
};

struct X {
    state st : 2;  // compiles with uint8_t st : 2
};

Clang 3.9.0编译成功.

GCC 4.8.4和5.3.0抱怨:

warning: ‘X::st’ is too small to hold all values of ‘enum state’

谁是对的?

解决方法

TL; DR

两者都是正确的.

枚举的值受基础类型的限制,而不是枚举器的限制!

C 14,7.2列举声明,第8段:

It is possible to define an enumeration that has values not defined by any of its enumerators.

这意味着有可能:

state x = static_cast< state >(5);

这就是GCC警告你的事情:枚举状态可能有不适合2位的值.

但是,只要您不尝试对X :: st实际执行此操作,一切都是闪亮的.

这(可能)是为什么Clang不会警告你.

由于标准不要求任何一种诊断方法,因此警告或没有警告您没有错.

(编辑:李大同)

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

    推荐文章
      热点阅读