我gcc
編譯器可以讓我定義爲unsigned long long(即64位),字面作爲文字類型:0x1ull VS 0x1llu
#define A_LITERAL 0x1ull
---或---
#define A_LITERAL 0x1llu
是這兩個字面陳述之間有任何區別。這對其他C編譯器是否共同?
我gcc
編譯器可以讓我定義爲unsigned long long(即64位),字面作爲文字類型:0x1ull VS 0x1llu
#define A_LITERAL 0x1ull
---或---
#define A_LITERAL 0x1llu
是這兩個字面陳述之間有任何區別。這對其他C編譯器是否共同?
兩者都是由C標準(節6.4.4.1)允許的。
無符號後綴u
可以在長l
(或long long(ll
))後綴之前或之後。
標記這個答案的問題是在C的上下文中,這引用了C標準。 –
兩者都是相同的:從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
清理可選指標以使它們脫穎而出(標準中標有下標)。 – paxdiablo
謝謝。我希望我的「粘貼」從文檔翻譯會比它更好一點... –
這不是一個C++的問題。 – Potatoswatter
ull
或llu
強制編譯器將常量當作unsigned
和long long integer
。
和u
的順序並不重要,也不是他們的情況。你也可以寫LLU
或ULL
。
我投票了,因爲它教會了我一些東西。我已經_knew_這兩種形式都是有效的,但首選'ULL',因爲它匹配'unsigned long long'類型。然而,事實證明這些類型相當流暢,允許像「long unsigned long」這樣的「怪異」:參見http://stackoverflow.com/questions/17287957/is-long- unsigned -as-valid-as- unsigned-long-in-c – paxdiablo