C - pretypovani pointeru

Jirka Kosina jikos na jikos.cz
Pondělí Březen 14 12:43:02 CET 2005


On Mon, 14 Mar 2005, Jan Kasprzak wrote:

> potreboval bych vyresit takovy kosmeticky problem - jak ciste napsat
> pretypovani integeru na pointer, aniz by gcc nadavalo, ze to ma jinou
> velikost:
> Jak se teda da kompilatoru najevo, ze opravdu chci v danem miste
> pretypovavat integer a pointer, i kdyz vim ze maji ruznou velikost?

Obavam se ze to nepujde a je to tak spravne. Duvodem je paragraf 6.3.2.3/5 
v ISO IEC/9899:

"An integer may be converted to any pointer type. Except as previously 
specified [jedna se o konverze mezi literalem 0 a NULL pointerem] the 
result is implementation-defined, might not be correctly aligned, might 
not point to an entity of the referenced type, and might be a trap 
representation."

Cili gcc spravne emituje warning, protoze chovani prekladaneho zdrojaku 
neni jednoznacne (dle normy).

> Je vzdy sizeof(long) == sizeof(void *)? Pak by asi slo pouzit

Z normy C to nikde AFAICS neplyne.

-- 
JiKos.


Další informace o konferenci Linux