簡體   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