我有一个使用wxWidgets的C ++应用程序。对于32位和64位主机,应用程序的某些部分有所不同。目前我使用sizeof(void *),但是有更好的方法使用条件编译并且是平台中立的吗?
答案 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()
有什么问题?编译器会愉快地将其优化为常量。