[英]Warning : left shift count >= width of type
我在头文件中声明了这个枚举:
enum wildcard {
....
....
NW_SRC = 0x111UL << 40,
....
};
当我编译它时,我收到以下警告:
warning: left shift count >= width of type [enabled by default]
我认为这是因为编译器将枚举类型视为int
。 我该如何解决这个问题?
你有两个不同的问题,首先是操作,然后是常量的声明。
对于该操作,您可以使用inttypes.h
提供的宏
UINT64_C(0x111) << 40
具有适当宽度的常数。
但是枚举常量是标准定义的int
,所以这对于定义一个枚举常量无法帮助你,如果在你的平台上int
只有32位宽(这很可能),它就足以保存该值。
您平台上的UL
可能是32位。 您可能需要使用ULL
:
enum wildcard {
....
....
NW_SRC = 0x111ULL << 40,
....
};
这将修复警告,但表达式的结果可能不一定适合enum
(有关详细信息和相关标准文档的参考,请参阅此答案 )。
UL
是无符号长的,但大多数编译器的长期是32位。 你想要ULL
的无符号长。
但正如Jens Gustedt在答案中正确指出的那样,在C中,枚举不能保持大于int的值,所以这无济于事。 相比之下,C ++确实允许枚举用更大的整数类型表示。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.