c++ - 在 C++ 中确定 32 位与 64 位

标签 c++ 32bit-64bit conditional-compilation

我正在寻找一种方法来可靠地确定 C++ 代码是在 32 位编译还是在 64 位编译。我们已经提出了我们认为使用宏的合理解决方案,但很想知道人们是否能想到这可能会失败的情况,或者是否有更好的方法来做到这一点。请注意,我们正在尝试在跨平台、多编译器环境中执行此操作。

#if ((ULONG_MAX) == (UINT_MAX))
# define IS32BIT
#else
# define IS64BIT
#endif

#ifdef IS64BIT
DoMy64BitOperation()
#else
DoMy32BitOperation()
#endif

谢谢。

最佳答案

不幸的是,没有定义 32/64 位跨主要编译器的跨平台宏。我发现最有效的方法如下。

首先我选择了我自己的代表。我更喜欢 ENVIRONMENT64/ENVIRONMENT32。然后我找出所有主要编译器使用什么来确定它是否是 64 位环境,并使用它来设置我的变量。

// Check windows
#if _WIN32 || _WIN64
#if _WIN64
#define ENVIRONMENT64
#else
#define ENVIRONMENT32
#endif
#endif

// Check GCC
#if __GNUC__
#if __x86_64__ || __ppc64__
#define ENVIRONMENT64
#else
#define ENVIRONMENT32
#endif
#endif

另一个更简单的方法是从编译器命令行简单地设置这些变量。

关于c++ - 在 C++ 中确定 32 位与 64 位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6104169/

相关文章:

C++:在 MSVC 2010 中使用 #if std::is_fundamental<T>::value 进行条件编译

haskell - Haskell 中的 CPP 扩展和多行文字

c++ - valgrind 在主机名命令输出中显示内存泄漏

c++ - 如何使用表单扩展 QTabWidget

internet-explorer - 强制使用 32 位 Internet Explorer ComObject

ios - 如何知道您的 .ipa 是否为 64 位

C++ 宏代码替换

c++ - 如何创建一个从指定内存地址开始的数据结构(不使用 new)?

c# - 文件被复制到 SysWOW64 而不是 System32

java - Java注释处理器是否能够删除注释代码