2013-06-25 13 views
6

Mein gcc Compiler ermöglicht es mir, eine unsigned long long (dh 64 Bit) wörtlichen wieWörtliche Typen: 0x1ull vs 0x1llu

#define A_LITERAL 0x1ull 

zu definieren --- oder ---

#define A_LITERAL 0x1llu 

Ist es gibt einen Unterschied zwischen diesen beiden wörtlichen Aussagen. Ist das bei anderen C-Compilern üblich?

+2

Ich wähle das, weil es mir etwas beigebracht hat. Ich habe bereits _knew_ beide Formen waren gültig, aber bevorzugen "ULL", weil es dem Typ "unsigned long long" entsprach. Es stellt sich jedoch heraus, dass die Typen auch ziemlich flüssig sind, was solche "Seltsamkeiten" wie "lange unsignierte lange" zulässt: siehe http://stackoverflow.com/questions/17287957/is-long-unsigned-as-valid-as- unsigned-long-in-c – paxdiablo

Antwort

3

beide erlaubt sind durch die C-Norm (Abschnitt 6.4.4.1).

Das unsignierte Suffix u kann vor oder nach dem langen l (oder langen langen (ll)) Suffix stehen.

+0

Das Markieren der Antwort als die Frage war im Kontext von C und dies zitiert den C-Standard. –

6

Beide sind gleich: Auszug aus n3337 Entwurf von C++ 11-Standard:

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

Die optionalen Indikatoren wurden aufgeräumt, um sie hervorzuheben (wurden im Standard indiziert). – paxdiablo

+0

Danke. Ich hatte gehofft, dass mein "Einfügen" aus dem Dokument ein wenig besser übersetzen würde als es ... –

+0

Dies ist keine C++ - Frage. – Potatoswatter

0

ull oder llu zwingen den Compiler, eine Konstante als unsigned und long long integer zu behandeln.
Die Reihenfolge von ll und u spielt keine Rolle, noch ihr Fall. Sie können auch LLU oder ULL schreiben.

Verwandte Themen