#ifdef 用于32位平台

23
在我维护的应用程序中,我们遇到了影响stdlib的文件描述符限制问题。这个问题只会影响标准库的32位版本。
我已经为我的代码设计了一个修复方案,并希望在编译32位可执行文件时实现它。我可以使用什么预处理器符号来确定代码是为32位还是64位目标编译的?
编辑
对不起,没有提到,代码是跨平台的,Linux、Windows、Solaris和其他一些Unix平台,大多数使用GCC进行编译。有什么通用标准可以跨平台使用吗?
编辑2
我发现了一些定义"__ILP23"和"__LP64",看起来它们可能有效... 一个讨论解释了unix平台的背景。有人使用过这些定义吗?这将可行吗?

这是平台相关的。不同的操作系统使用不同的 #defines。如果你很幸运,Boost 可能在某个地方隐藏了一个可移植的包装器。但否则,你就只能检查特定于平台的那些了。顺便问一下,你正在运行哪个平台? - jalf
只是一个想法:#if sizeof(int) == 64 - mmmmmmmm
@rstevens:我认为下面其中一个答案中的注释说#if和sizeof(int)在不同的时间执行。当预处理器完成其工作时,sizeof运算符尚未被执行。 - veefu
可能是C++在Windows和Linux上编译:ifdef开关的重复问题。 - Cory Klein
可能是Determining 32 vs 64 bit in C++的重复问题。 - phuclv
显示剩余2条评论
11个回答

0

C++标准中没有定义这样的符号 - 您在问题中没有指定的特定平台可能会提供一个。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接