C tietotyyppien koot
Mureakuha
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).
| kääntäjä | Microsoft | Borland | Watcom | Microsoft | Intel Windows | Borland | Watcom | Gnu v.3.x | Intel Linux | Microsoft | Intel Windows | Gnu | Intel Linux |
| bool | 2 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
| char | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
| short int | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 |
| int 1 | 2 | 2 | 2 | 4 | 4 | 4 | 4 | 4 | 4 | 4 | 4 | 4 | 4 |
| long int | 4 | 4 | 4 | 4 | 4 | 4 | 4 | 4 | 4 | 4 | 4 | 8 | 8 |
| long long int (__int64) | 8 | 8 | 8 | 8 | 8 | 8 | 8 | 8 | |||||
| enum | 2 | 2 | 1 | 4 | 4 | 4 | 4 | 4 | 4 | 4 | 4 | 4 | 4 |
| float | 4 | 4 | 4 | 4 | 4 | 4 | 4 | 4 | 4 | 4 | 4 | 4 | 4 |
| double | 8 | 8 | 8 | 8 | 8 | 8 | 8 | 8 | 8 | 8 | 8 | 8 | 8 |
| long double | 10 | 10 | 8 | 8 | 16 | 10 | 8 | 12 | 12 | 8 | 16 | 16 | 16 |
| osoitin 2 | 2 | 2 | 2 | 4 | 4 | 4 | 4 | 4 | 4 | 8 | 8 | 8 | 8 |
| pitkä osoitin | 4 | 4 | 4 | ||||||||||
1 X64:ssä int voi olla myös 8 tavua
2 osoitin voi olla myös 6 -tavuinen
| kääntäjä | VAX/11 | Cray-2 | Unisys 1100 | Harris H800 |
| char | 8 | 8 | 9 | 8 |
| short int | 16 | 64(32) | 18 | 24 |
| int | 32 | 64(32) | 36 | 24 |
| long | 32 | 64 | 36 | 48 |
| char* | 32 | 64 | 72 | 24 |
| int* | 32 | 64(24) | 72 | 24 |
| int(*)( ) | 32 | 64 | 576 | 24 |
Lähde: Indian Hill, C Style and Coding Standards
