Posted By: Sheltem (Terra Guardian) on 'CZprogram' Title: Re: Poradi polozek struktury Date: Tue Sep 23 12:02:20 1997 Ahoj, > typedef struct tagHERO { > LPSTR Name; > DWORD Life; > DWORD Magic; > BYTE Str, Dex, Con, Int, Wis; > DWORD Attrs; > } HERO; > Mam jistotu, ze v pameti jsou polozky struktury umistene v tom poradi, > v jakem jsem je definoval, nebo to zalezi na tom, jak si to prekladac > rozmisti? On si je nerozmisti, ale jenom je "PACKNE", coz znamena, ze polozky ve strukture zarovna na 32-bitu, aby na ne ( a taky pak ty dalsi ) mohl pristupovat porad dvaatricetibitove. Takze vlastne i takovej BYTE on reprezentuje v pameti jako DWORD, ale to ty navenek vlastne nevidis.. > vyzkousel v GCC, tak to nefungovalo... Ano, protoze GCC ma defaultne nastavenej pack tusim na 4 - coz je presne 32 bitova hranice. WATCOM ma default 1, ( a VisualC myslim taky ). Je tusim jasne, ze ten sizeof(HERO) potom bohuzel presne neodpovida skutecne velikosti toho typu v pameti. sizeof jenom poscita velikosti datovejch polozek v tom typu, takze kontrukce typu : fread ( &data, sizeof ( data_type ), 1, file ); proste nemusi vzdycky fungovat. ( u GCC ne, pokud nepridas k tem polozkam ten atribut ) Jak toto ovlivnit ? V tvem pripade u GCC budes muset napsat strukturu HERO nasledovne : typedef struct tagHERO { DWORD atrrs __attribute__ ((packed)); } HERO; a tak dale... pokud by nekoho jeste zajimalo, jak zmenit hodnotu PACK u Watcomu ( a tusim, ze to samy plati i pro VC++ ), tak je to : #pragma PACK(4) - napriklad Sheltem