18

gcc または icc を使用しているかどうかをコンパイル時に検出する方法は?

__GNUC__(私は、icc が定義していることを知るのに非常__GNUC_MINOR__に戸惑いました__GNUC_PATCHLEVEL__

4

5 に答える 5

19

を使用しております

#ifdef __INTEL_COMPILER

iccデフォルトと仮定して、分割しgccます。

于 2011-04-20T21:24:39.180 に答える
8

this__INTEL_COMPILERに従って確認できると思います。

于 2011-04-20T21:25:11.587 に答える
1

ICCが定義する理由__GNUC__などは、コンパイラ固有のマクロを検査し、それらを期待するあなたのようなコードのためです...

于 2011-04-20T21:56:04.407 に答える
1

定義済みのマクロをプリプロセッサ出力でプロセッサに出力させ、自分に合ったマクロを探すことができます。次のようなプリプロセッサ出力を生成できます。

icc  -dM -E -o foo.P foo.c

それから見てくださいfoo.P(テキストファイルなので)。私の場合、コンパイラのバージョンでマクロがicc定義されていることがわかりました。__ICCしかし、それは何も定義しませんでし__INTEL_COMPILERた。

于 2012-11-29T11:56:41.180 に答える
1

従来、コンパイラは独自のシンボルとそのバージョンをプリプロセッサ シンボルとして定義していたため、コードを適合させることができました (通常はバグや特異性を回避するため)。

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

于 2011-04-21T08:18:01.073 に答える