2013-06-25 55 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