我已经在我的头文件中声明了这个枚举:
enum wildcard {
....
....
NW_SRC = 0x111UL << 40,
....
};
当我编译它时,我得到以下警告:
warning: left shift count >= width of type [enabled by default]
我认为这是因为编译器将枚举类型视为int
。我该如何解决这个问题?
发布于 2013-01-18 00:38:56
您平台上的UL
可能是32位的。您可能需要改用ULL
:
enum wildcard {
....
....
NW_SRC = 0x111ULL << 40,
....
};
这将修复警告,但表达式的结果不一定适合enum
(有关详细信息和相关标准文档的参考,请参阅this answer )。
发布于 2013-01-18 00:44:17
你有两个不同的问题,首先是操作,然后是常量的声明。
对于该操作,您可以使用inttypes.h
中提供的宏
UINT64_C(0x111) << 40
具有适当宽度的常量。
但是根据标准的定义,枚举常量是int
,所以如果您的平台上的int
只有32位宽(很有可能是这样),这将不会帮助您定义一个足够大以保存值的枚举常量。
发布于 2013-01-18 00:39:19
UL
是无符号的long,但大多数编译器上的long是32位的。你想要ULL
作为unsigned long long。
但是正如Jens Gustedt在他们的答案中正确指出的那样,在C中,枚举不能容纳比更大的值,所以这不会有帮助。相反,C++允许用更大的整数类型表示枚举。
https://stackoverflow.com/questions/14383757
复制相似问题