2013-06-25 13 views
6

My gcc kompilator pozwala mi określić unsigned long long (czyli 64-bit) dosłowne jakLiteralne typy: 0x1ull vs 0x1llu

#define A_LITERAL 0x1ull 

--- lub ---

#define A_LITERAL 0x1llu 

Czy istnieje jakaś różnica między tymi dwoma dosłownymi stwierdzeniami. Czy jest to wspólne dla innych kompilatorów języka C?

+2

ja to głosowanie w górę, ponieważ nauczył mnie czegoś. Obydwa moje formularze były już poprawne, ale preferowały "ULL", ponieważ pasowały do ​​typu "unsigned long long". Okazuje się jednak, że typy są również dość płynne, pozwalając na taką "dziwność" jako "długo unsigned long": zobacz http://stackoverflow.com/questions/17287957/is-long-unsigned-as-valid-as- unsigned-long-in-c – paxdiablo

Odpowiedz

3

Oba dozwolone przez normy C (sekcja 6.4.4.1).

Niepodpisany przyrostek u może być przed lub po długim sufiksie l (lub długim długim (ll)).

+0

Oznaczenie tej odpowiedzi jako pytania było w kontekście C i to cytuje standard C. –

6

są jednakowe: fragment n3337 projekt standardu C++ 11:

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

Oczyścić opcjonalne wskaźniki, aby je wyróżnić (zostały uwzględnione w standardzie). – paxdiablo

+0

Dzięki. Miałem nadzieję, że moja "pasta" z dokumentu będzie się tłumaczyła trochę lepiej niż ona ... –

+0

To nie jest pytanie w C++. – Potatoswatter

0

ull lub llu zmusić kompilator do traktowania stałej jako unsigned i long long integer.
Kolejność ll i u nie ma znaczenia, ani ich sprawa. możesz również napisać: LLU lub ULL.