如何以平台中立的方式确定架构?

时间:2009-12-27 18:00:17

标签: c++ platform bit

我有一个使用wxWidgets的C ++应用程序。对于32位和64位主机,应用程序的某些部分有所不同。目前我使用sizeof(void *),但是有更好的方法使用条件编译并且是平台中立的吗?

4 个答案:

答案 0 :(得分:3)

通常人们使用#defines来确定位数(确切的定义取决于编译器)。这比使用sizeof(void *)的运行时方法更好。

至于平台中立,好吧,有些编译器在多个平台上......

答案 1 :(得分:2)

根据您的编译器,您可以访问特定于平台的宏。尝试查看他们的文档。

答案 2 :(得分:1)

所有常见编译器都有预定义的预处理器宏来识别平台。例如,如果您正在使用GCC,则可以轻松地检查它们:

touch foo.h; g++ -E -dM foo.h

其中包括

#define linux 1
#define __x86_64 1

对我来说,因为我现在正在使用64b linux,而且

#define __APPLE__ 1
#define __i386 1

在32b OS X上,我听到了。

对于Sun Studio 12,它们记录在案here。此外,Sun Microsystems将它们视为编译器API的一部分,因此可确保兼容性。例如,在我的Solaris机器上,我定义了__SunOS_5_10__sparcv9(暗示64b)。

在具有IBM xlc编译器的AIX系统上,查看/etc/vac.cfg及其options关键字字段以查找预定义的宏。在我有权访问的系统上定义了至少_AIX和更具体的_AIX61以及_POWER(在64b PPC上)。

在HP-UX及其aCC编译器上,itanium上至少有__ia64个宏。其他一些特定于aCC的预定义宏记录在here

答案 3 :(得分:0)

使用大小重要的sizeof()有什么问题?编译器会愉快地将其优化为常量。