以前一直正常使用枚举类型,一直没有注意到枚举其实是有取值范围的,我以为枚举是无符号整数,今天才知道原来是有符号的。
隐隐想起以前有学过,可能没有注意,就忘了。
比如我定义下面枚举:
enum demo_enum{
DEMO_NUM_MIN = 1,
DEMO_NUM_MAX = 0x7fffffff,
DEMO_OTHER,
};
导致编译出现下面问题:
error: overflow in enumeration values
如果我指定 DEMO_OTHER 的值,然后,发现,没有出现问题。
enum demo_enum{
DEMO_NUM_MIN = 1,
DEMO_NUM_MAX = 0x7fffffff,
DEMO_OTHER=0x80000000,
};
报错消失了。
估计是和编译器有关,gcc下报错,g++没有报错。
查了点资料,关于enum的大小,一般编译器都是采取的量体裁衣,但是我不建议对项目使用这些边缘的值,这样不方便项目的移植。