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