Esistono numeri interi di dimensioni fisse in GCC?
-
06-07-2019 - |
Domanda
Sul compilatore MSVC ++, è possibile utilizzare i tipi __int8
, __int16
, __int32
e simili per numeri interi con dimensioni specifiche. Ciò è estremamente utile per le applicazioni che devono lavorare con strutture di dati di basso livello come formati di file personalizzati, strutture di dati di controllo hardware e simili.
Esiste un equivalente simile che posso usare sul compilatore GCC?
Soluzione
Lo standard ISO C, a partire dallo standard C99, aggiunge l'intestazione standard <stdint.h>
che li definisce:
uint8_t - unsigned 8 bit
int8_t - signed 8 bit
uint16_t - unsigned 16 bit
int16_t - signed 16 bit
uint32_t - unsigned 32 bit
int32_t - signed 32 bit
uint64_t - unsigned 64 bit
int64_t - signed 64 bit
Uso sempre questi tipi.
Questi tipi sono definiti solo se l'implementazione supporta tipi predefiniti con dimensioni e caratteristiche appropriate (cosa che la maggior parte fa).
(u)int_leastN_t
definisce anche i tipi con nomi del modulo (u)int_fastN_t
(tipi che hanno almeno la larghezza specificata) e <=> (il " il più veloce " ; tipi che hanno almeno la larghezza specificata); questi tipi sono obbligatori.
Se stai utilizzando un'implementazione precedente che non supporta <=>, puoi crearne una tua; un'implementazione è Doug Gwyn's " q8 " ;.