【发布时间】:2010-11-04 04:37:24
【问题描述】:
我当前的代码类似于:
enum Enum1 : signed __int8
{
Value1 = 1 ,
Value2 = 2 ,
Value3 = -3 // C4341
} ;
错误详情状态:
“警告 C4341:‘Value3’:有符号值超出枚举常量的范围”
MSDN 指出只有当您使用超出 int 范围的值时才会出现此警告:
(> 2^31) 或 (
为什么它告诉我我的负值无效?这只是一个警告,但谷歌告诉我这个警告表明这些枚举值将是未定义的——这会破坏我的程序。
【问题讨论】:
-
如果你用十六进制定义它会抱怨吗? (signed __int8)-3 == hex 0xFD == dec 253 (如果你的机器无论如何都是二进制补码......)
-
@JimR 发出错误,指出 0xFD 是分配给有符号变量的无符号值。
-
@Giffyguy:尝试使用 char 而不是 __int8。我很好奇你是否收到警告(它们在 VS 中应该是相同的)。
-
@Jason char(和 signed char)产生相同的结果:C4341 表示 -3 和 C4369 表示 0xFD
-
@Giffyguy:好吧,我在 gcc4.4 及更高版本中没有收到警告,所以我很茫然。也许微软搞砸了 C++0x 的实现?
标签: c++ visual-c++ enums warnings compiler-warnings