2010-01-30 104 views
31

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

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

Porting Command Line Unix Tools to Mac OS X导游指定__APPLE__,另外__APPLE_CC__但确实__OSX__

Porting from GCC导说:

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

再次,没有提到关于__OSX__宏。

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

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

+0

Qt甚至使用不同的定义:'Q_OS_OSX' – math 2015-08-11 14:26:53

回答

20

这一切都取决于。

每个宏指定的含义不同。
请参阅:https://developer.apple.com/library/mac/documentation/Porting/Conceptual/PortingUnix/compiling/compiling.html#//apple_ref/doc/uid/TP40002850-SW13

__APPLE__

该宏在任何苹果电脑定义。

__APPLE_CC__

该宏被设定为表示 编译器的版本号的整数。例如,您可以根据GCC的相同版本区分编译器 ,但可以使用不同的错误修复或功能。 较大的值表示稍后的编译器。

__OSX__

Presumabley操作系统是OS X

一个具体的变所以给出的上述定义,我会用__APPLE__区分苹果特定的代码。

+0

是的,我明白'__APPLE__'和'__APPLE_CC__'宏的区别 - 我从我的问题链接到相同的指南。顺便说一句,你在导引引用中包含了'__OSX__'宏,你可以理解它是来自链接指南的解释,但它是你的评论。我有点困惑:-) – mloskot 2010-01-30 02:21:58

+2

链接已过时。 – Zammbi 2013-08-14 04:44:58

+1

@Zammbi链接固定。 – 2015-06-15 18:31:22

9

这是用于操作系统的宏的nice list

网上有关于__OSX__的信息很少。你会安全的__APPLE__

+0

+1给你和Martin York。谢谢!不过,我仍然很好奇'__OSX__'从哪里来,所以我会稍微等待一下,将我的问题标记为已回答。 – mloskot 2010-01-30 14:56:41

3

我通常为此使用__MACH__。从最早版本的OS X开始就已经定义了它(甚至在此之前,可能)。

+1

'__MACH__'也用于GNU/Hurd,因为后者目前使用Mach内核。 – kennytm 2010-01-30 10:10:43

+0

@KennyTM - 谢谢 - 我不知道这里有其他使用'__MACH__'的系统。不过,就我个人而言,这很好,因为我通常只关心Mac OS X v Linux v Windows。 – 2010-01-30 16:25:54

+0

Paul,感谢您的提示,这很有用,但它并没有真正回答我原来的问题。我想准确知道'__OSX__'的来源。 – mloskot 2010-01-30 17:09:43