C a promenne

Jakub Slajs xslajsj
Středa Březen 17 14:31:27 CET 2004


Zdravim!

> V C je pretypovani realizovano takto:
> int a;
> char c[30];
> a=(int)c[3];

Vy me s tim C-ckem chcete privest do blazince ;-)

Ten priklad nahore je pochopitelne spatne jelikoz ziskate jeden znak
char a ten pak teprve pretypujete na int.

Ja bych to napsal spise takto:
    a = ((short *)c)[0];

Ale osobne bych se takovymto konstrukcim radeji vyhybal. Uz napr. z toho
duvodu ze C vam nezaruci kolik bytu dany datovy typ zabira (int zpravidla 4).
Dalsi problem je v tom, ze kompilator nektere datove typy v ramci optimalizace
muze "zarovnat" na urcite adresy aby byl pristup k nim rychlejsi (tj. int muze
zarovnat na adresy delitelne ctyrmi). Pokud pak pretypujete adresu charu ktery
neni na takoveto adrese na int ....

Vyse uvedene plati obecne (tj. zejmena pro kompilatory pro PC), prekladac pro
8-bitovy jednocip tyto optimalizace provadet nebude.

S pozdravem,

Jakub Slajs

_________________________________________________________
Do You Yahoo!?
Get your free @yahoo.com address at http://mail.yahoo.com





Další informace o konferenci Hw-list