在 C/C 中包装 Mac OS X 特定代码的宏

新手上路,请多包涵

在阅读各种 C 和 C++ 源代码时,我遇到了两个宏 __APPLE____OSX__ 。我发现在各种代码中大量使用了 __OSX__ ,尤其是那些源自 *BSD 系统的代码。

但是,有时我发现仅测试 __OSX__ 是不够的,我必须使用 __APPLE__ 宏完成测试。

Porting Command Line Unix Tools to Mac OS X 指南指定 __APPLE__ 和另外 __APPLE_CC__没有 提到 __OSX__

来自 GCC 的移植 指南说:

  • 使用 #ifdef __GNUC__ 包装任何 GCC 特定的代码。
  • 使用 #ifdef __APPLE_CC__ 包装任何 Mac OS X 特定的代码。

同样,没有提及 __OSX__ 宏。

Mac OS X 平台和 XCode 开发环境中预定义的宏应该用于区分 C/C++ 程序中的 OSX 特定代码?

__OSX__ 宏定义在哪里?是 *BSD 特定宏吗?

原文由 mloskot 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
2 个回答

这一切都取决于。

每个宏都指定了不同的含义。

请参阅: https ://developer.apple.com/library/mac/documentation/Porting/Conceptual/PortingUnix/compiling/compiling.html#//apple_ref/doc/uid/TP40002850-SW13

__APPLE__

此宏定义在任何 Apple 计算机中。

__APPLE_CC__

该宏设置为一个整数,表示编译器的版本号。例如,这使您可以区分基于相同版本 GCC 但具有不同错误修复或功能的编译器。较大的值表示较晚的编译器。

__OSX__

大概操作系统是 OS X 的特定变体

因此,鉴于上述定义,我将使用 __APPLE__ 来区分苹果特定的代码。

原文由 Martin York 发布,翻译遵循 CC BY-SA 4.0 许可协议

对于遇到此问题 >= 2019 的任何人,我发现有一个标题“Availability.h”。

在该标题中,#defines 如下:

 #define __MAC_10_0            1000
#define __MAC_10_1            1010
#define __MAC_10_2            1020
#define __MAC_10_3            1030
#define __MAC_10_4            1040
#define __MAC_10_5            1050
#define __MAC_10_6            1060
#define __MAC_10_7            1070
#define __MAC_10_8            1080
#define __MAC_10_9            1090
#define __MAC_10_10         101000
#define __MAC_10_10_2       101002
#define __MAC_10_10_3       101003
#define __MAC_10_11         101100
#define __MAC_10_11_2       101102

因此,您可以判断您是否在特定的 MacOS 平台上进行编译。

原文由 SMGreenfield 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题