关于枚举大小
原来帖子不知道为什么无法回复,只好再开了,不好意思。
问题:编译器是不是控制着枚举类型的大小,怎么控制的?
书里对枚举大小的定义是: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。所以觉得是某个编译器参数在控制。所以来这里问一下这个参数是啥。