C tietotyyppien koot

Mureakuha

Loikkaa: valikkoon, hakuun

C:ssä tietotyyppien koot voivat vaihdella standardin mukaan seuraavasti:

sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long) = sizeof(size_t)

Jotta koodi olisi riippumaton kääntäjästä, kääntäjän versiosta ja järjestelmästä, kannattaa edellisistä riippuvat ominaisuudet laittaa eri tiedostoon kuin riippumattomat ominaisuudet. Mikäli jonkun kohdan toiminta riippuu tietotyyppien koosta, kannattaa hyödyntää tietotyypeille jotakin olemassa olevaa nimeämiskäytäntöä. Esimerkkejä

  • C-standardi (ISO): int8_t, int16_t, int32_t, int64_t
  • Microsoft: __int8, __int16, __int32, __int64
  • INT8, INT16, INT32, INT64
  • MISRA: SI_8, SI_16, SI_32, SI_64

Seuraavaan on taulukoitu kokoja joillakin järjestelmillä ja kääntäjillä (taulukon ulkoasu poikkeaa riippuen mitä selainta käytät).

X86/X64 (taulukossa koot tavuina)
 
16 bit
32 bit
64 bit
kääntäjäMicrosoftBorlandWatcom MicrosoftIntel WindowsBorland WatcomGnu v.3.xIntel Linux MicrosoftIntel WindowsGnuIntel Linux
bool211 111111 1111
char111 111111 1111
short int222 222222 2222
int 1222 444444 4444
long int444 444444 4488
long long int (__int64)    88  88 8888
enum221 444444 4444
float444 444444 4444
double888 888888 8888
long double10108 8161081212 8161616
osoitin 2222 444444 8888
pitkä osoitin444            
Lähde: Agner Fog

1 X64:ssä int voi olla myös 8 tavua
2 osoitin voi olla myös 6 -tavuinen


Muita järjestelmiä (taulukossa koot bitteinä)
kääntäjäVAX/11Cray-2Unisys 1100Harris H800
char8898
short int1664(32)1824
int3264(32)3624
long32643648
char*32647224
int*3264(24)7224
int(*)( )326457624

Lähde: Indian Hill, C Style and Coding Standards

Henkilökohtaiset työkalut