2010-01-30 6 views
31

Çeşitli C ve C++ kaynaklarını okurken, iki makro __APPLE__ ve __OSX__ karşılaştım. Çeşitli kodlarda, özellikle *BSD sistemlerinden kaynaklananlar için __OSX__'u bol miktarda kullanıyorum. Ancak, bazen yalnızca __OSX__ sınamasının yeterli olmadığını ve __APPLE__ makrosuyla sınamayı tamamladığımı buldum.Mac OS X'e özgü kodu C/C++ sarmak için hangi makro?

Porting Command Line Unix Tools to Mac OS X kılavuzları __APPLE__ ve ek __APPLE_CC__ belirtir ama değil söz __OSX__ yapar.

Porting from GCC rehber diyor:

  • Kullanım #ifdef __GNUC__ herhangi GCC özel kodu sarmak için.
  • Mac OS X'e özgü kodları sarmak için #ifdef __APPLE_CC__'u kullanın.

Yine, hiç söz hakkında __OSX__ makro.

Mac OS X platformu ve XCode geliştirme ortamında, OSX'e özgü kodu C/C++ programlarında ayırt etmek için hangi makro ön tanımlıdır?

__OSX__ makrosu nerede tanımlıdır? *BSD belirli bir makro mu?

+0

Qt farklı bir tanım bile kullanıyor: 'Q_OS_OSX' – math

cevap

20

Her şey değişir.

Her makro anlam bakımından farklı bir şeyi belirtir.
Bkz: https://developer.apple.com/library/mac/documentation/Porting/Conceptual/PortingUnix/compiling/compiling.html#//apple_ref/doc/uid/TP40002850-SW13

__APPLE__

Bu makro herhangi bir Apple bilgisayarda tanımlanır.

__APPLE_CC__

Bu makro derleyici sürüm numarasını temsil eden bir tam sayıya ayarlanır. Bu, örneğin, GCC'nin aynı sürümüne dayanan derleyiciler arasında, ancak farklı hata düzeltmeleri veya özelliklerle ayırt edebilmenizi sağlar. Daha büyük değerler daha sonraki derleyicileri gösterir.

__OSX__

Presumabley OS yüzden elma özel kodu ayırt etmek __APPLE__ kullanacağı Yukarıdaki tanımlamalar verilen OS X

belirli bir türüdür.

+0

Evet, '__APPLE__' ve' __APPLE_CC__' makroları arasındaki farkı anlıyorum - sorularımdan aynı kılavuza bağlantı yaptım. BTW, size rehberlik içerisindeki __OSX__' makrosunu dahil ettiniz ve bunu anlatan rehberdeki açıklamaları anlayabiliyorsunuz, ancak bu sizin yorumunuz. Biraz kafam karıştı :-) – mloskot

+2

Link güncel değil. – Zammbi

+1

@Zammbi Bağlantı düzeltildi. –

9

İşte işletim sistemleri için bir nice list makroları.

Web üzerinde __OSX__ hakkında çok az bilgi var. __APPLE__ ile güvende olacaksınız.

+0

+ 1 size ve Martin York'a. Teşekkürler! Bununla birlikte, __OSX__'nin nereden geldiğine hala çok merak ediyorum, bu yüzden sorumu cevaplandı olarak işaretlemeyi biraz bekleyeceğim. – mloskot

3

Bunun için normalde __MACH__ kullanıyorum. OS X'in en eski versiyonundan beri tanımlanmıştır (ve daha önce de tahmin edilmiştir).

+1

'__MACH__', GNU/Hurd için de kullanılıyor çünkü ikincisi şu anda bir Mach çekirdeği kullanıyor. – kennytm

+0

@KennyTM - bunun için teşekkürler - Ben burada '__MACH__' kullanmak başka bir sistem olduğunu bilmiyordum. Benim amaçlarım için, ancak Mac OS X v Linux v Windows'la ilgilendiğim için yeterince iyi. –

+0

Paul, bahşiş için teşekkürler, yararlıdır, ama asıl soruma cevap vermiyor. __OSX__'nin nereden geldiğini tam olarak bilmek isterim. – mloskot