c89: преобразовать int в void * и back

Во-первых, это не обман:

Безопасно ли приводить 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 для целочисленного типа ...

8
задан Community 23 May 2017 в 12:02
поделиться