Zunächst einmal ist dies kein Duplikat von:
Ist es sicher, eine int zu void Zeiger und zurück zu int wieder?
Der Unterschied in den Fragen ist folgender: Ich verwende den void* nur, um den int zu speichern, aber ich verwende ihn eigentlich nie als void*.
Die Frage läuft also auf Folgendes hinaus:
Ist ein void * garantiert mindestens so breit wie ein int
Ich kann intptr_t nicht verwenden, weil ich c89 / ANSI C verwende.
EDITAR
In stdint.h von C99 (gcc-Version) sehe ich Folgendes:
/* Types for `void *' pointers. */
#if __WORDSIZE == 64
# ifndef __intptr_t_defined
typedef long int intptr_t;
# define __intptr_t_defined
# endif
typedef unsigned long int uintptr_t;
#else
# ifndef __intptr_t_defined
typedef int intptr_t;
# define __intptr_t_defined
# endif
typedef unsigned int uintptr_t;
#endif
Könnte ich möglicherweise einfach etwas Ähnliches zusammenbasteln und erwarten, dass es funktioniert? Es scheint, dass das Casting funktionieren sollte, da alle intptr_t ist ein typedef zu einem integralen Typ ...