msvc と gcc の両方で x86-32 と x86-64 の互換性を保つために使用する必要がある #ifdefs を知っていると思います。以下を参照してください。これは、これらのプラットフォームで完全ですか?
#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*)
。