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

然而,有时我发现仅测试__OSX__是不够的,我必须用__APPLE__个宏完成测试.

Porting Command Line Unix Tools to Mac OS X本指南规定了__APPLE__,另外还有__APPLE_CC__,但not提到了__OSX__.

Porting from GCC指南说:

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

再说一次,没有提到__OSX__个宏.

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

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

推荐答案

这要视情况而定.

每个宏指定不同的含义.
请参阅: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是OS X的一个特殊变体

因此,根据上面的定义,我将使用__APPLE__来区分特定于苹果的代码.

C++相关问答推荐

定义_MISIX_C_SAL时,在MacOS上编译失败,并出现奇怪错误

问关于C中的指针和数组

Pure Win32 C(++)-除了替换控件的窗口程序之外,还有其他方法可以在输入时禁用按钮吗?

ISO_C_BINDING,从Fortran调用C

不同到达时间的轮询实现

如何在C宏中确定Windows主目录?

在C语言中使用scanf()时我无法理解的警告

由Go调用E.C.引起的内存快速增长

C:fopen是如何实现二进制模式和文本模式的?

我的程序在收到SIGUSR1信号以从PAUSE()继续程序时总是崩溃()

在基本OpenGL纹理四边形中的一个三角形中进行渲染

函数的限制限定指针参数允许优化调用方函数吗?

平均程序编译,但结果不好

For循环中的变量行为不符合预期.[C17]

如何读取文件并将内容保存在字符串中?(在C语言中,没有崩溃或核心转储错误)

如何在c中使用具有不同变量类型的内存分配?

从BIOS(8086)中读取刻度需要多少?

从不兼容的指针类型返回&&警告,但我看不出原因

为什么孤儿进程在 Linux 中没有被 PID 1 采用,就像我读过的一本书中声称的那样?

为什么 int32_t 和 int16_t 在 printf 输出中具有相同的位数?