如何以平台中立的方式确定架构?
我有一个使用 wxWidgets 的 C++ 应用程序。对于 32 位和 64 位主机,应用程序的某些部分有所不同。目前我使用 sizeof(void *),但是有没有更好的方法使用条件编译并且是平台中立的?
I have a C++ app that uses wxWidgets. Certain parts of the app differ for 32 and 64 bit hosts. Currently I use sizeof(void *), but is there a better way that uses conditional compilation and is platform neutral?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
通常人们使用#defines 来确定位数(确切的定义取决于编译器)。这比使用 sizeof(void*) 的运行时方法更好。
至于平台中立,有些编译器可以在多个平台上运行。
Typically people use #defines to determine bitness (the exact define will depend on the compiler). This is better than a runtime approach using sizeof(void*).
As for platform neutral, well, some compilers are on multiple platforms..
根据您的编译器,您可能可以访问特定于平台的宏。尝试查找他们的文档。
Depending on your compiler you may have access to platform specific macros. Try to look up their documentation.
所有常见编译器都具有识别平台的预定义预处理器宏。例如,如果您正在使用 GCC,您可以轻松地检查它们:
这
对我来说是有利的,因为我现在使用的是 64b linux,而且
我听说在 32b OS X 上。
对于 Sun Studio 12,它们记录在此处< /a>.此外,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 的预定义宏记录在此处。All common compilers have predefined preprocessor macros that identify the platform. For example, if you are using GCC, you can check them all easily:
which yields among others
for me, since I'm using a 64b linux at the moment, and
on a 32b OS X, I hear.
For Sun Studio 12, they are documented here. Also, Sun Microsystems considers them as part of the API of the compiler so compatibility is ensured. For example, on my Solaris box, I have
__SunOS_5_10
and__sparcv9
defined (implies 64b).On AIX systems with the IBM xlc compiler, take a look at
/etc/vac.cfg
and itsoptions
keyword fields to find out the predefined macros. There are at least_AIX
and more specific_AIX61
as well as_POWER
(on a 64b PPC) defined on a system where I have access.On HP-UX and its aCC compiler, there's at least the
__ia64
macro on itanium. Some other aCC specific predefined macros are documented here.在大小很重要的地方使用
sizeof()
有什么问题吗?编译器很乐意将其优化为常量。What's wrong with using
sizeof()
where the size matters? The compiler will happily optimise it away to a constant.