2010-10-21 38 views
2

我使用gcc,它在我有的體系結構(一般不知道)上實現枚舉爲32位整數。如果我嘗試分配一個枚舉值過大時,我得到枚舉與64位底層整數

warning: integer overflow in expression

有沒有辦法讓GCC使用64位整數作爲底層的整數類型? gcc的具體方法很好,但如果有便捷的方式,那就更好了。

**編輯** 這是一個相關的帖子:64 bit enum in C++?

不像這個問題,我也有興趣在GNU擴展。

回答

1

以下作品我-std=c++0x,而與-std=c++98雖然

enum EnumFoo { 
    FooSomething = 0x123456789ULL 
}; 

我測試了這個與

$ g++ --version 
g++ (Ubuntu 4.4.3-4ubuntu5) 4.4.3 
+0

您使用的是哪個版本的gcc?這似乎不適用於4.3.4,我仍然得到一個32位枚舉。 – 2010-10-21 19:15:05

+0

@pythonic隱喻:更新我的答案來解決您的問題。 – Arun 2010-10-21 19:57:18

+0

'ULL'應該告訴你的編譯器使用C99的'unsigned long long'類型,它的最小寬度爲64位(在我意識到的所有實現中定義爲正好64位)。但是,如果你的編譯器不支持'long long'(例如,如果你使用GCC並使用* strict * C++ 98,這就是'-std = C++ 98'的意思),'ULL'將會是看作是一個錯誤,或者額外的'L'將被忽略,並且你將得到一個'unsigned long'(它通常是32位寬)。我不記得準確的哪種行爲符合標準,但如果它是給你32位,我懷疑後者。 – 2010-10-21 19:57:49

0

一個選項:使用特定類型的static const成員創建模板類。

例如std::tr1::integral_constant,在GNU發行版(至少是我使用的那個)中用C++/tr1/type_traits聲明。

一個枚舉值:你的聲明可能物質(例如,使用UL如適用)