OT:programovani v C

Miroslav Šinko sinkomiro@gmail.com
Pondělí Červen 15 23:45:00 CEST 2009


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



Další informace o konferenci Hw-list