1

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

4

4 回答 4

3

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

至于平台中立,一些编译器在多个平台上。

于 2009-12-27T18:04:37.473 回答
2

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

于 2009-12-27T18:05:05.270 回答
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,它们在此处记录。此外,Sun Microsystems 将它们视为编译器 API 的一部分,因此确保了兼容性。例如,在我的 Solaris 机器上,我__SunOS_5_10定义了__sparcv9(暗示 64b)。

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

在 HP-UX 及其 aCC 编译器上,至少有__ia64itanium 上的宏。此处记录了其他一些特定于 aCC 的预定义宏。

于 2009-12-27T19:47:35.127 回答
0

What's wrong with using sizeof() where the size matters? The compiler will happily optimise it away to a constant.

于 2009-12-27T21:39:51.347 回答