C - pretypovani pointeru

Jan Kasprzak kas na fi.muni.cz
Pondělí Březen 14 11:31:33 CET 2005


	Zdravim,

potreboval bych vyresit takovy kosmeticky problem - jak ciste napsat
pretypovani integeru na pointer, aniz by gcc nadavalo, ze to ma jinou
velikost:

mam nejakou funkci (callback), kteremu jako parametr jde dat void *,
a kdyz si ten callback registruju, tak zaroven dam parametr, s jakym
parametrem se ma volat. Cili neco jako

typedef void callback_t(void *);

int register_callback(callback_t, void *);

void my_callback(void *arg)
{
	int fd = (int)arg;   /* 1 */
	...
	close(fd);
}
...
main() {

	int fd = open(....);

	register_callback(my_callback, (void *)fd); /* 2 */
	...
}

Pritom na miste /*1*/ se dozvim ze

warning: cast from pointer to integer of different size

a na miste /*2*/ se dozvim 

warning: cast to pointer from integer of different size

Jak se teda da kompilatoru najevo, ze opravdu chci v danem miste
pretypovavat integer a pointer, i kdyz vim ze maji ruznou velikost?

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

int fd = (int)(long)arg; a dale
register_callback(..., (void *)(long)fd);

Ale nevim jestli toto je korektni.

-Y.

-- 
| Jan "Yenya" Kasprzak  <kas at {fi.muni.cz - work | yenya.net - private}> |
| GPG: ID 1024/D3498839      Fingerprint 0D99A7FB206605D7 8B35FCDE05B18A5E |
| http://www.fi.muni.cz/~kas/   Czech Linux Homepage: http://www.linux.cz/ |
> Whatever the Java applications and desktop dances may lead to, Unix will <
> still be pushing the packets around for a quite a while.      --Rob Pike <


Další informace o konferenci Linux