2010-01-30 38 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