C: char -> int

Jan Waclawek konfera na efton.sk
Středa Květen 12 12:22:25 CEST 2010


Napriek tomu, ze sa to casto robi a aj ja to tak robim, union{ int a; char b[sizeof(a)]} ani union{ int a; struct {char b0, b1, b2, b3;}} na konverziu typov nedoporucujem, lebo:

1. prvky pola ako aj prvky structu mozu byt zarovnane ako kompilator chce, t.j. nemusia lezat v za sebou nasledujucich byte
2. endianita viacbytoveho typu je ako kompilator chce
3. podla normy, po zapise do jedneho prvku unionu maju ostatne prvky nedefinovany obsah (6.2.6.1#7)

Aj ked sa obvykle ako problem cituje 2. (ktory sa da obist sadou makier pre rozne endianity) a obcas 1 (na ktore zase ma napr. gcc nestandardny atribut __packed__), podla mna je najzakernejsi problem 3 (ktory je pomerne neznamy, a moze sa prejavit napr. ako nasledok optimalizacie).

wek



More information about the Hw-list mailing list