【发布时间】:2010-10-18 15:36:48
【问题描述】:
在我维护的一个应用程序中,我们遇到了影响标准库的文件描述符限制问题。此问题仅影响 32 位版本的标准库。
我已经为我的代码设计了一个修复程序并希望实现它,但仅限于为 32 位可执行文件编译时。 #ifdef 可以使用什么预处理器符号来确定代码是针对 32 位还是 64 位目标编译的?
编辑
不好意思,没提,代码是跨平台的,linux、windows、solaris等几个unix风格,主要是用GCC编译。我可以跨平台使用任何事实上的标准吗?
编辑 2
我发现了一些定义“__ILP23”和“__LP64”,它们似乎可以工作......here 的讨论解释了 unix 平台的背景。有人有使用这些定义的经验吗?这个可以用吗?
【问题讨论】:
-
这取决于平台。不同的操作系统使用不同的#defines。如果你幸运的话,Boost 有一个隐藏在某个地方的便携式包装器。但除此之外,您只需要检查特定于平台的那些。顺便问一下,您在哪个平台上运行?
-
编辑了问题...代码主要针对 windows、solaris 和 linux,部分还运行在 AIX 和 HP-UX 上。
-
只是一个想法:#if sizeof(int) == 64
-
@rstevens:我认为以下答案之一中的 cmets 表示 #if 和 sizeof(int) 是在不同时间执行的。当预处理器完成其工作时,sizeof 运算符尚未执行。