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