La próxima vez que desee verificar las macros predefinidas compatibles con GCC en una plataforma, ejecute el preprocesador con el indicador -dM
. Enumerará todas las macros predefinidas disponibles en el sistema. Por ejemplo:
$ touch dummy.hxx
$ cpp -dM ./dummy.hxx
#define __DBL_MIN_EXP__ (-1021)
#define __FLT_MIN__ 1.17549435e-38F
#define __CHAR_BIT__ 8
#define __WCHAR_MAX__ 2147483647
#define __DBL_DENORM_MIN__ 4.9406564584124654e-324
#define __FLT_EVAL_METHOD__ 0
#define __DBL_MIN_10_EXP__ (-307)
#define __FINITE_MATH_ONLY__ 0
#define __SHRT_MAX__ 32767
#define __LDBL_MAX__ 1.18973149535723176502e+4932L
#define __UINTMAX_TYPE__ long unsigned int
#define __linux 1
#define __unix 1
#define __linux__ 1
...
Me inclinaría más por probar la disponibilidad de funciones que el nombre de la plataforma. Intente usar autoconf.
De lo contrario, esta es una lista completa de definiciones de plataforma.
Consulte también esta página para obtener definiciones sobre compiladores, bibliotecas, arquitecturas y dispositivos.
Detectar OSX con el __APPLE__
macro si es necesario. Es mejor usar configure
para detectar características si puede, pero no todo funciona bien de esa manera.
Yo uso __MACH__
para probar Mac OS X:no es 100 % exclusivo de Mac OS X (¡todavía puede haber algunas cajas antiguas de NeXT por ahí!) pero es lo suficientemente bueno para diferenciar entre Mac y Linux.