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