我使用gcc,它在我有的体系结构(一般不知道)上实现枚举为32位整数。如果我尝试分配一个枚举值过大时,我得到枚举与64位底层整数
warning: integer overflow in expression
有没有办法让GCC使用64位整数作为底层的整数类型? gcc的具体方法很好,但如果有便捷的方式,那就更好了。
**编辑** 这是一个相关的帖子:64 bit enum in C++?
不像这个问题,我也有兴趣在GNU扩展。
我使用gcc,它在我有的体系结构(一般不知道)上实现枚举为32位整数。如果我尝试分配一个枚举值过大时,我得到枚举与64位底层整数
warning: integer overflow in expression
有没有办法让GCC使用64位整数作为底层的整数类型? gcc的具体方法很好,但如果有便捷的方式,那就更好了。
**编辑** 这是一个相关的帖子:64 bit enum in C++?
不像这个问题,我也有兴趣在GNU扩展。
以下作品我-std=c++0x
,而与-std=c++98
虽然
enum EnumFoo {
FooSomething = 0x123456789ULL
};
我测试了这个与
$ g++ --version
g++ (Ubuntu 4.4.3-4ubuntu5) 4.4.3
一个选项:使用特定类型的static const
成员创建模板类。
例如std::tr1::integral_constant
,在GNU发行版(至少是我使用的那个)中用C++/tr1/type_traits声明。
一个枚举值:你的声明可能物质(例如,使用U
,L
如适用)
您使用的是哪个版本的gcc?这似乎不适用于4.3.4,我仍然得到一个32位枚举。 – 2010-10-21 19:15:05
@pythonic隐喻:更新我的答案来解决您的问题。 – Arun 2010-10-21 19:57:18
'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