UNIX派生システムを識別する一般的なマクロ? (Linux、OSX、BSD、...)

MacOSXでマクロ __ unix __ が定義されていないのはなぜかと思います。

MacOSXはBSD UNIXの派生物ですか?

私のコードで __ unix __ マクロを定義した場合、いくつかの問題がありますか?

一般的に、現在のプラットフォームをチェックするとき、私は次のようなことをするのが好きです:

#ifdef __unix__
...
#endif

の代わりに:

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

最良の選択肢は、自分のマクロを一箇所に定義することでしょうか?例えば。:

#if defined(__unix__) || defined(__APPLE__) || defined(__linux__) || defined(BSD) ...
#define UNIX_
#endif
5
@ウィリアムプルセル:固定。ありがとうございました。
追加された 著者 Pietro,
あなたがそれをすることを選択した場合は、名前にダブルアンダースコアを使用しないでください。
追加された 著者 William Pursell,
あなたの #ifdef __unix __ または #ifdef UNIX _ でどんな種類のものを囲んでいますか?おそらく、 __ has_include()__ has_feature()(コンパイラのサポートに依存します)のような、より良い選択肢を探しているはずです。またはautoconf。
追加された 著者 Ken Thomases,
あなたのタグの1つを 'c'に変更すると、あなたの問題にもっと目を向けるでしょう。がんばろう。
追加された 著者 shellter,

1 答え

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

4
追加された
しかし、をインクルードする前に、私がPOSIXシステム上にあるかどうかを確認しなければなりません。そうしないと、そのファイルは利用できなくなります。そして、は小さなファイルではいけません...
追加された 著者 Pietro,
POSIXでは、 で L_ctermid を定義する必要があります。
追加された 著者 ninjalj,