While reading various C and C++ sources, I have encountered two macros __APPLE__
and __OSX__
. I found plenty of use of __OSX__
in various codes, especially those originating from *BSD
systems.
However, sometimes I find that testing __OSX__
only is not sufficient and I have to complete tests with __APPLE__
macro.
The Porting Command Line Unix Tools to Mac OS X guides specifies __APPLE__
and additionally __APPLE_CC__
but does not mention __OSX__
.
The Porting from GCC guide says:
- Use
#ifdef __GNUC__
to wrap any GCC-specific code.- Use
#ifdef __APPLE_CC__
to wrap any Mac OS X-specific code.
Again, no mention about __OSX__
macro.
What macro is predefined on Mac OS X platform and XCode development environment that should be used to distinguish OSX-specific code in C/C++ programs?
Where is the __OSX__
macro defined? Is it *BSD
specific macro?