cas a 32-bit platformy

Ing. Miloslav Ponkrác postovni.holub na atlas.cz
Čtvrtek Červen 8 23:49:31 CEST 2000


>tak jsem si to nasel (v chytre knizce), v ANSI C je zaruceno:
>sizeof(char) = 1 Byte
>sizeof(short int) < = sizeof(int) <= sizeof(long int)
>sizeof(unsigned int)  = sizeof(signed int)
>sizeof(float) <= sizeof(double) <= sizeof(long double)
>
>no, naadsenej z toho moc nejsem :(((


Tak vidíte, jak jsou vaše programy závislé na platformě, a jak jsem vás
překvapil. Přečtete-li si pozorně normu (já to udělal před psaním
portabilních programů), tak zjistíte ještě další věci:

1) int musí mít alespoň 16 bitů
2) long musí mít alespoň 32 bitů
3) sizeof(char) = 1, ale není řečeno, že to musí být bajt! Musí to být
přirozená nejmenší alokovatelná jednotka paměti počítače. Kdysi na jednom
počítači to bylo 9 bitů, a plně to vyhovuje i dnešní normě. Pokud teoreticky
procesor XY nebude moci pracovat s 8 bity, ale třeba aspoň s 16, potom
klidně může mít char 16 bitů.
4) operátor sizeof neříká, kolik bajtů má daný typ, ale kolikrát je větší,
než char. To nemusí být shodné s bajtem, viz předchozí bod 3.

Pokud se liším od chytré knížky, omlouvám se, ale takto je to v normě.

A teď si vezměte, kolik lidí toto ví, a odhadněte, jak moc budou programy
portabilní, až se přesuneme mimo 32-bitovou platformu. To se teprve ukážou
problémy.

Miloslav Ponkrác




Další informace o konferenci Linux