Windows上でのVC++とLinux上でのGCCとに対応するコードを書く際に、コンパイラ依存部分を#ifdefで切り替える場合のマクロ指定を調べました。
コンパイラがデフォルトで定義するマクロで使えそうなものは、
Linux/GCCでは__unix__も定義されるが、UNIX全体を一つの書きかたで括るのは無理な話。
__GNUC__, _MSC_VERともに、コンパイラ・バージョンが識別できる値がマクロに定義されるので、バージョン違いの対応もこのマクロで可能です。なお、__GNUC__にはメジャーバージョンの値が定義されるので、マイナーバージョンの値まで識別する必要があるなら__GNUC_MINOR__マクロを併せて使います。
GCCでデフォルト定義されるマクロ一覧を見る
echo | gcc -v -E -dM -