gpt4 book ai didi

c++ - #ifdef 用于 32 位平台

转载 作者:IT老高 更新时间:2023-10-28 21:44:42 25 4
gpt4 key购买 nike

在我维护的一个应用程序中,我们遇到了影响标准库的文件描述符限制问题。此问题仅影响 32 位版本的标准库。

我已经为我的代码设计了一个修复程序并希望实现它,但仅限于为 32 位可执行文件编译时。 #ifdef 可以使用什么预处理器符号来确定代码是针对 32 位还是 64 位目标编译的?

编辑

不好意思,没提,代码是跨平台的,linux、windows、solaris等几个unix风格,主要是用GCC编译。我可以跨平台使用任何事实上的标准吗?

编辑 2

我找到了一些定义“__ILP23”和“__LP64”,它们似乎可以工作......讨论here解释了 Unix 平台的背景。有人有使用这些定义的经验吗?这个可以用吗?

最佳答案

我不确定是否有合适的通用#if def。 C++ 标准几乎肯定没有定义一个。当然也有特定平台的。

例如,Windows

#if _WIN64 
// 64 bit build
#else
// 32 bit build
#endif

EDIT OP 提到这是使用 GCC 和其他编译器在 Windows 和非 Windows 之间进行的交叉编译

没有可用于所有平台和编译器的通用宏。一点预处理器的魔法虽然可以做到这一点。假设您只在 x86 和 amd64 芯片上工作,以下应该可以解决问题。不过,它可以很容易地扩展到其他平台

#if _WIN64 || __amd64__
#define PORTABLE_64_BIT
#else
#define PORTABLE_32_BIT
#endif

关于c++ - #ifdef 用于 32 位平台,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/735647/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com