Gemeenschappelijke macro om een ​​van UNIX afgeleid systeem te identificeren? (Linux, OSX, BSD, ...)

Ik vraag me af waarom op MacOSX de macro __ unix __ niet is gedefinieerd.

Is MacOSX geen BSD UNIX-derivaat?

Als ik de code __ unix __ in mijn code definieer, kan ik dan problemen ondervinden?

Over het algemeen geef ik er bij het controleren van het huidige platform de voorkeur aan om:

#ifdef __unix__
...
#endif

in plaats van:

#if defined(__unix__) || defined(__APPLE__) || defined(__linux__) || defined(BSD) ...
...
#endif

Is de beste optie om mijn eigen macro op één plaats te definiëren? bijv .:

#if defined(__unix__) || defined(__APPLE__) || defined(__linux__) || defined(BSD) ...
#define UNIX_
#endif
5
@WilliamPursell: fixed. Dank je.
toegevoegd de auteur Pietro, de bron
Als u ervoor kiest om dat te doen, gebruik dan geen dubbel onderstrepingsteken in de naam.
toegevoegd de auteur William Pursell, de bron
Wat voor soort dingen zou u omsluiten met uw # ifdef __unix __ of # ifdef _ _ _ \/code>? Misschien moet je op zoek naar betere alternatieven voor die, zoals __ has_include() of __ has_feature() (afhankelijk van de ondersteuning van de compiler). Of autoconf.
toegevoegd de auteur Ken Thomases, de bron
u krijgt meer zicht op uw probleem als u een van uw tags wijzigt in 'c'. Succes.
toegevoegd de auteur shellter, de bron

1 antwoord

POSIX requires _POSIX_VERSION to be defined in (also accessible via sysconf(_SC_VERSION)), so try that.

4
toegevoegd
Ok, maar voordat ik heb opgenomen, moet ik controleren of ik op een POSIX-systeem zit, anders is dat bestand niet beschikbaar. En zou geen klein bestand moeten zijn om ...
toegevoegd de auteur Pietro, de bron
Welnu, moet L_ctermid definiëren op POSIX ...
toegevoegd de auteur ninjalj, de bron