gcc または icc を使用しているかどうかをコンパイル時に検出する方法は?
__GNUC__
(私は、icc が定義していることを知るのに非常__GNUC_MINOR__
に戸惑いました__GNUC_PATCHLEVEL__
。
gcc または icc を使用しているかどうかをコンパイル時に検出する方法は?
__GNUC__
(私は、icc が定義していることを知るのに非常__GNUC_MINOR__
に戸惑いました__GNUC_PATCHLEVEL__
。
を使用しております
#ifdef __INTEL_COMPILER
icc
デフォルトと仮定して、分割しgcc
ます。
this__INTEL_COMPILER
に従って確認できると思います。
ICCが定義する理由__GNUC__
などは、コンパイラ固有のマクロを検査し、それらを期待するあなたのようなコードのためです...
定義済みのマクロをプリプロセッサ出力でプロセッサに出力させ、自分に合ったマクロを探すことができます。次のようなプリプロセッサ出力を生成できます。
icc -dM -E -o foo.P foo.c
それから見てくださいfoo.P
(テキストファイルなので)。私の場合、コンパイラのバージョンでマクロがicc
定義されていることがわかりました。__ICC
しかし、それは何も定義しませんでし__INTEL_COMPILER
た。
従来、コンパイラは独自のシンボルとそのバージョンをプリプロセッサ シンボルとして定義していたため、コードを適合させることができました (通常はバグや特異性を回避するため)。
__has_feature
CLang は、クエリという形で、これまで見たことのないメカニズムを導入しました。「バグの回避」の慣行に取って代わるものではありません (これが、CLang がまだ特定のシンボルを公開している理由です) が、コンパイラの能力を照会するためのより自然なスタイルを可能にします。他のコンパイラがそのような機能を定義する予定があるかどうかはわかりません。