Nelle espressioni del linguaggio C sono digitati all'interno: i letterali hanno tipi. Per esempio. 123
è un int, e 123U
è un int unsigned, 123L
è un long int e così via. Il tipo di un'espressione dipende dai tipi delle sottoespressioni: il tipo di a + b
dipende dai tipi di a
e b
.
Garantire il tipo corretto è particolarmente importante quando si esegue un po 'di manipolazione. Devi anche fare attenzione ai caratteri letterali di grandi dimensioni che non rientrano in un int (o nel tipo di variabile a cui stai assegnando il valore dell'espressione - le conversioni di restringimento sono una fonte comune di errori).
Tuttavia, la maggior parte del codice non dovrebbe utilizzare esplicitamente un tipo long
o il suffisso letterale L
perché la dimensione degli interi lunghi dipende dalla piattaforma. I numeri interi e i numeri interi lunghi possono anche avere le stesse dimensioni.
Per il codice portatile che ha bisogno di una dimensione specifica, è più corretto usare i tipi di interi a larghezza fissa C99 (come int64_t
). Non hanno suffissi letterali corrispondenti, devi invece usare i macro letterali come INT64_C(123)
da stdint.h
. Queste macro applicheranno i cast giusti o i suffissi di tipo dipendente dalla piattaforma, se necessario.
In C ++ il tipo di espressione può influenzare con sovraccarichi. In particolare 0
, 'false
'
, nullptr
e %code% si comportano in modo molto diverso, nonostante tutto sia "nullo" e in una certa misura implicitamente convertibile l'uno con l'altro.