关于枚举大小

initial_y 2007-02-14 03:51:48
原来帖子不知道为什么无法回复,只好再开了,不好意思。

问题:编译器是不是控制着枚举类型的大小,怎么控制的?

书里对枚举大小的定义是:sizeof枚举是sizeof某类可以包含枚举range的整型,并且不会大于sizeof(int)。也就是说枚举大小不一定等于sizeof(int)。

比如在一个sizeof(int)等于4的机器上,sizeof枚举有可能是1或者4,但不会是8

我问这个问题的原因是发现一些代码里会在枚举定义的最后会出现一个这个东西:
FORCE_DWORD = 0x7fffffff
比如:
typedef enum _D3DPOOL {
D3DPOOL_DEFAULT = 0,
D3DPOOL_MANAGED = 1,
D3DPOOL_SYSTEMMEM = 2,
D3DPOOL_SCRATCH = 3,

D3DPOOL_FORCE_DWORD = 0x7fffffff
} D3DPOOL;

根据书里描述,这个成员的作用就是控制枚举类型的range,从而强制让sizeof枚举为sizeof(DWORD)。而这么做的目的就是为了高效地32位寻址。

看到这个我就在VS2005里试验了一下,发现不必加入那个控制range的成员,所有枚举大小都等于int。所以觉得是某个编译器参数在控制。所以来这里问一下这个参数是啥。
...全文
1514 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
柯本 2007-02-14
  • 打赏
  • 举报
回复
一般编译器都有选项的
BCB:
* -b Make enums integer-sized (-b- makes them short as possible)
GCC:
-fshort-enums Use the narrowest integer type possible for enumeration types
VC Same as int
taodm 2007-02-14
  • 打赏
  • 举报
回复
enum X {TEST = 0xfffffffffLL }; 在devcpp下,X就是8字节的。
jixingzhong 2007-02-14
  • 打赏
  • 举报
回复
这个是环境相关的咚咚 ~
magicsutra 2007-02-14
  • 打赏
  • 举报
回复
应该与编译器有关,不同的编译器有不同的实现。这种东西知道就好,没必要深究。

65,206

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧