在C++函数中,如果编译64位架构,我需要编译器选择不同的块.
我知道为MSVC++和g ++做一个方法,所以我会把它作为答案发布.但是我想知道是否有更好的方法(更优雅,适用于所有编译器/所有64位架构).如果没有更好的方法,我应该寻找其他预定义的宏,以便与其他编译器/架构兼容?
在C和C++中检测32位和64位构建的独立于体系结构的方法如下所示:
// C #include// C++ #include #if INTPTR_MAX == INT64_MAX // 64-bit #elif INTPTR_MAX == INT32_MAX // 32-bit #else #error Unknown pointer size or missing size macros! #endif
这适用于MSVC++和g ++:
#if defined(_M_X64) || defined(__amd64__) // code... #endif
你为什么选择一个区块而不是另一个区块?如果您的决定基于指针的大小,请使用sizeof(void*) == 8
.如果您的决定基于整数的大小,请使用sizeof(int) == 8
.
我的观点是,架构本身的名称应该很少有任何区别.出于您的目的,您只需检查您需要检查的内容.您的问题并没有清楚地说明您的检查目的是什么.您要问的是类似于通过查询Windows版本来确定是否安装了DirectX.您可以使用更多便携式和通用工具.
雷蒙德报道了这个.