torutkのブログ

ソフトウェア・エンジニアのブログ

コンパイラ依存のコーディングを囲む#ifdefシンボル

Windows上でのVC++Linux上でのGCCとに対応するコードを書く際に、コンパイラ依存部分を#ifdefで切り替える場合のマクロ指定を調べました。
コンパイラがデフォルトで定義するマクロで使えそうなものは、

Linux/GCCでは__unix__も定義されるが、UNIX全体を一つの書きかたで括るのは無理な話。

__GNUC__, _MSC_VERともに、コンパイラ・バージョンが識別できる値がマクロに定義されるので、バージョン違いの対応もこのマクロで可能です。なお、__GNUC__にはメジャーバージョンの値が定義されるので、マイナーバージョンの値まで識別する必要があるなら__GNUC_MINOR__マクロを併せて使います。

GCCでデフォルト定義されるマクロ一覧を見る

echo | gcc -v -E -dM -