Я думаю, что знаю, какие #ifdefs мне нужно использовать, чтобы быть совместимыми с x86-32 и x86-64 на msvc и gcc, см. Ниже. Это завершено для этих платформ?
#if defined(_MSC_VER)
# if defined(_M_IA64) || defined(_M_X64)
# define SIZEOF_SIZE_T 8
# define SIZEOF_VOIDP 8
# elif defined(_M_IX86)
# define SIZEOF_SIZE_T 4
# define SIZEOF_VOIDP 4
# else
# error "Unsupported MSVC platform"
# endif
#elif defined(__GNUG__)
# if defined(__x86_64__) || defined(__ia64__)
# define SIZEOF_SIZE_T 8
# define SIZEOF_VOIDP 8
# elif defined(__i386__)
# define SIZEOF_SIZE_T 4
# define SIZEOF_VOIDP 4
# else
# error "Unsupported GCC platform"
# endif
#endif
Являются ли IA64 и x86 64 одинаковыми с точки зрения программиста на C?
Я также хотел бы иметь возможность компилировать на Mac. Что мне добавить?
Редактировать: Я не могу использовать sizeof (), так как я имею дело с неприкасаемым устаревшим кодом, который использует такие вещи, как #if SIZEOF_VOIDP == SIZEOF_LONG
. Я также интересуюсь только архитектурой, а не фактическим содержанием. Обратите внимание, что прекомпилятор не позволяет #if sizeof(size_t) == sizeof(void*)
.