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_featureCLang は、クエリという形で、これまで見たことのないメカニズムを導入しました。「バグの回避」の慣行に取って代わるものではありません (これが、CLang がまだ特定のシンボルを公開している理由です) が、コンパイラの能力を照会するためのより自然なスタイルを可能にします。他のコンパイラがそのような機能を定義する予定があるかどうかはわかりません。