Originariamente inviato da MItaly
Se ti
serve che un intero abbia delle dimensioni fissate, sui sistemi POSIX, sui compilatori che supportano C99 e da C++11 in poi è disponibile l'header <stdint.h> (<cstdint> nella versione C++) che contiene dei typedef per tipi a dimensioni garantite; in ogni caso, anche prima che si standardizzasse <stdint.h> praticamente ogni compilatore aveva qualche estensione non-standard che faceva la stessa cosa.
Il punto è che devi vedere se effettivamente un intero a larghezza fissata ti è davvero necessario: in genere gli unici casi in cui serve per davvero è quando devi leggere/scrivere file binari o comunque inviare dati binari in qualche maniera. Se ti è sufficiente il range minimo garantito dallo standard per i tipi primitivi (o sai che sulle piattaforme per cui compili il range effettivo è quello che ti interessa) in genere ti conviene usare i tipi "classici", in particolare il semplice int, che dovrebbe essere il tipo nativo* (o quasi) della piattaforma.
Se invece richiedi senza motivo interi troppo grossi in alcuni casi potresti incorrere in problemi di prestazioni: una CPU a 32 bit non lavora nativamente su interi a 64 bit, per cui il processore deve "simulare" le operazioni usando più istruzioni.
* in realtà su Windows a 64 bit int resta a 32 bit per compatibilità con la montagna di codice che assume che int sia a 32 bit, ma su praticamente ogni altro sistema non è così; altra precisazione, ovviamente int è il tipo nativo compatibilmente con il range minimo garantito: su una CPU a 8 bit ovviamente int (che richiede come range minimo -32768~32767) non può essere "l'intero nativo", dato che deve essere almeno 16 bit.