2013-06-25 9 views
6

mio gcc compilatore mi permette di definire un lungo (vale a dire a 64-bit) unsigned long letteraletipi letterali: 0x1ull vs 0x1llu

#define A_LITERAL 0x1ull 

--- --- o

#define A_LITERAL 0x1llu 

Is c'è qualche differenza tra queste due affermazioni letterali. È comune ad altri compilatori C?

+2

Ho votato perché mi ha insegnato qualcosa. Ho già _knew_ entrambi i form erano validi ma preferivano 'ULL' perché corrispondeva al tipo' unsigned long long'. Tuttavia, risulta che i tipi sono piuttosto fluidi, consentendo una tale "stranezza" come "long unsigned long": vedi http://stackoverflow.com/questions/17287957/is-long-unsigned-as-valid-as- unsigned-long-in-c – paxdiablo

risposta

3

Entrambi permessi dallo standard C (sezione 6.4.4.1).

Il suffisso senza firma u può essere prima o dopo il suffisso lungo l (o long long (ll)).

+0

Contrassegnando questa risposta come la domanda era nel contesto di C e questo cita lo standard C. –

6

Entrambi sono lo stesso: estratto dal progetto n3337 di C++ 11 norma:

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

Pulito gli indicatori opzionali per farli risaltare (erano abbonati nello standard). – paxdiablo

+0

Grazie. Speravo che la mia "incolla" del documento si sarebbe tradotta un po 'meglio di quanto non fosse ... –

+0

Questa non è una domanda in C++. – Potatoswatter

0

ull o llu forzare il compilatore a trattare una costante come unsigned e long long integer.
L'ordine di ll e u non importa, né il loro caso. è inoltre possibile scrivere LLU o ULL.