2013-06-25 56 views
6

gcc编译器可以让我定义为unsigned long long(即64位),字面作为文字类型:0x1ull VS 0x1llu

#define A_LITERAL 0x1ull 

---或---

#define A_LITERAL 0x1llu 

是这两个字面陈述之间有任何区别。这对其他C编译器是否共同?

+2

我投票了,因为它教会了我一些东西。我已经_knew_这两种形式都是有效的,但首选'ULL',因为它匹配'unsigned long long'类型。然而,事实证明这些类型相当流畅,允许像“long unsigned long”这样的“怪异”:参见http://stackoverflow.com/questions/17287957/is-long- unsigned -as-valid-as- unsigned-long-in-c – paxdiablo

回答

3

两者都是由C标准(节6.4.4.1)允许的。

无符号后缀u可以在长l(或long long(ll))后缀之前或之后。

+0

标记这个答案的问题是在C的上下文中,这引用了C标准。 –

6

两者都是相同的:从C++ 11标准草案n3337摘录:

integer-suffix: 
    unsigned-suffix long-suffix(opt) 
    unsigned-suffix long-long-suffix(opt) 
    long-suffix unsigned-suffix(opt) 
    long-long-suffix unsigned-suffix(opt) 

unsigned-suffix: one of 
    u U 

long-suffix: one of 
    l L 

long-long-suffix: one of 
    ll LL 
+0

清理可选指标以使它们脱颖而出(标准中标有下标)。 – paxdiablo

+0

谢谢。我希望我的“粘贴”从文档翻译会比它更好一点... –

+0

这不是一个C++的问题。 – Potatoswatter

0

ullllu强制编译器将常量当作unsignedlong long integer
u的顺序并不重要,也不是他们的情况。你也可以写LLUULL