繁体   English   中英

警告:左移计数> =类型的宽度

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM