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