La prossima volta che vorrai verificare le macro predefinite supportate da GCC su una piattaforma, esegui il preprocessore con il flag -dM
. Elencherà tutte le macro predefinite disponibili sul sistema. Ad esempio:
$ 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
...
Sarei più propenso a testare la disponibilità delle funzionalità rispetto al nome della piattaforma. Prova ad usare autoconf.
In caso contrario, questo è un elenco completo delle definizioni di piattaforma.
Dai un'occhiata anche a questa pagina per le definizioni relative a compilatori, librerie, architetture e dispositivi.
Rileva OSX con __APPLE__
macro se devi. È meglio usare configure
per rilevare le funzionalità se puoi, ma non tutto funziona bene in questo modo.
Uso __MACH__
per testare Mac OS X - non è unico al 100% per Mac OS X (potrebbero esserci ancora alcune vecchie scatole NeXT là fuori!) ma è abbastanza buono per capire la differenza tra Mac e Linux.