Во-первых, это не обман:
Безопасно ли приводить int на указатель void и снова вернуться к int?
Разница в вопросах заключается в следующем: я использую void * только для хранения int, но я никогда не использую его как void *.
Итак, вопрос действительно сводится к следующему:
Гарантированно ли void * по ширине не меньше int
Я не могу использовать intptr_t, потому что использую c89 / ANSI C.
РЕДАКТИРОВАТЬ
В stdint.h из C99 (версия gcc) я вижу следующее:
/* 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
Могу ли я просто установить что-то подобное и ожидать, что это сработает? Казалось бы, приведение типов должно работать, поскольку все intptr_t - это typedef для целочисленного типа ...