OT:programovani v C
Jan Waclawek
konfera@efton.sk
Pondělí Červen 15 23:56:00 CEST 2009
Nemam chut to teraz hladat, ale mam pocit, ze prave ta krkolomna definicia pripusta char aj vacsi ako 8 bitov (napr. u QR6 budeme hadam volit 12 - a 18 pre int :-) ), so vsetkymi moznymi nasledkami.
> No tak, ci onak, pre memcpy prvkov
> rovnakeho typu sizeof vrati vzdy
(nie zvycajne) spravnu hodnotu.
A co si Kefalin predstavuje pod pojmom "spravna hodnota"? Ja by som to formuloval radsej "rovnaku hodnotu"...
wek
-----Original Message-----
2009/6/15, Jan Waclawek <konfera@efton.sk>:
> sizeof() je jedna z mala vynimiek, ked sa pole (ktore v skutocnosti v C neexistuje a je to len taky syntakticky fake) poklada za pole (C99, 6.3.2.1, odst.4) a sizeof vracia jeho velkost v byte (6.5.3.4). Bohuzial, 6.5.3.4 hovori aj to, ze vysledok sizeof je implementacne zavisly (kedze interpretacia "byte" je tiez implementacne zavisla); ale zvycajne to sedi tak ako si clovek predstavuje.
Sizeof vracia hodnotu v bytoch, co je vzdy 8 bitov. Presne podla normy
je to tak, ze sizeof vrati pre char (signad/unsigned) vzdy 1.
Definicia charov hovori o min/max hodnotach (pre unsigned 0-255) a
hovori aj o tom, ze hodnoty sa skladaju z postupnych binarnych cislic
0/1, ktore reprezentuju mocniny 2. Je to definovane krkolomne, ale pre
char z toho vypadne stary znamy byte :-)
Implementacne zavisly je typ vyslednej premennej size_t.
A dalej implementacne zavisla je hodnota napr. pre struktury. Sizeof
vracia velkost aj s paddingom medzi prvkami struktury a s koncovym
paddingom. Velkost pola je potom zavisla od zarovnania clenov v
strukture.
No tak, ci onak, pre memcpy prvkov rovnakeho typu sizeof vrati vzdy
(nie zvycajne) spravnu hodnotu.
miro
_______________________________________________
HW-list mailing list - sponsored by www.HW.cz
Hw-list@list.hw.cz
http://list.hw.cz/mailman/listinfo/hw-list
Další informace o konferenci Hw-list