インテル® C++ コンパイラー 16.0 ユーザー・リファレンス・ガイド

Clang との互換性とサポート

インテル® コンパイラーは、Clang コンパイラーと互換性があります。互換バージョンの詳細は、リリースノートに記載されています。Clang は LLVM プロジェクトの一部で、C、C++、Objective-C、および Objective-C++ をサポートする新しいコンパイラー・フロントエンドを提供します。Clang と LLVM プロジェクトに関する詳細は、「clang: a C language family frontend for LLVM」 (http://clang.llvm.org (英語)) を参照してください。

OS X* プラットフォームでインテル® C++ コンパイラーを使用して作成された C 言語オブジェクト・ファイルは、Clang および C/C++ 言語ライブラリーとバイナリー互換があります。インテル® コンパイラーまたは Clang コンパイラーを使用して、オブジェクト・ファイルをリンカーに渡すことができます。

インテル® C++ コンパイラーによる Clang 環境のサポート

OS X* では、次のコンパイラーを利用できます。

どちらのコンパイラーも C/C++、Objective-C コードをコンパイルできます。icl/icl++ または icc/icpc コマンドでコンパイラーを起動すると、デフォルトで libc++ ライブラリーとヘッダーを使用してコードをコンパイルします。-stdlib=libstdc++ コンパイラー・オプションを指定して、GNU* 実装の標準 C++ ライブラリーを使用するように切り替えることができます。

OS X* 10.8 以前では、インテル® C++ コンパイラーはデフォルトで C++ 標準ライブラリー (libstdc++) の GNU* 実装を使用します。OS X* 10.9 以降では、デフォルトで libc++ を使用します。

サポートされる機能

以下のマイナーな機能を除き、Clang ベースのコンパイラーでは、OpenMP* やインテル® Cilk™ Plus などの GCC 互換コンパイラーの主な機能をすべて利用できます。

  • 10 進の浮動小数点型 (_Decimal32、_Decimal64、_Decimal128)

  • 識別子としての restrict キーワードの使用

  • 入れ子された関数 (GCC 言語拡張)

  • エクスポートしたテンプレート

サポートされるオプション、プラグマ、組込み関数の一覧を表示するには、-help コマンドを使用します。

マクロチェックの使用

事前定義済みマクロにより、特定のコンパイラーでコンパイルすべきコードを保護できます。OS X* 上で、インテル® C++ コンパイラーは 2 つのマクロ (__INTEL_COMPILER マクロと __INTEL_CLANG_COMPILER マクロ) を定義し、コードの一部のコンパイルに使用するコンパイラーを指定します。マクロにより、特定のコンパイラーでコンパイルするコードを保護できます。

__INTEL_COMPILER マクロは次のように使用します。

#ifdef __INTEL_COMPILER
// icc、icl でコンパイル可能なコード
#else 
// ほかのコンパイラーでコンパイル可能なコード
#endif
また、__EDG__ マクロにより、icc (EDG ベースのフロントエンド・コンパイラー) でコンパイルするコードを保護することもできます。

__INTEL_CLANG_COMPILER マクロにより、icl (Clang コンパイラー) でコンパイルするコードを保護できます。ただし、icc [EDG コンパイラー] でコンパイルできるコードが icl [Clang コンパイラー] でもコンパイルできるとは限らないため、ビルドエラーにならないように既存のマクロチェックを置換することを推奨します。

次のようにマクロチェックを置換します。

#if defined(__INTEL_COMPILER)
// icc、icl でコンパイル可能なコード


# if defined(__INTEL_CLANG_COMPILER)
// icl でのみコンパイル可能なコード


# if defined(__EDG__)
// icc でのみコンパイル可能なコード

# endif
#else 
// ほかのコンパイラーでコンパイル可能なコード
#endif

すべての __INTEL_COMPILER チェックを置換する必要はありません。例えば、インテル固有の組込み関数やプラグマは icc (EDG コンパイラー)/icl (CLANG コンパイラー) コンパイラーでコンパイルされているため、これらを使用するコードのマクロチェックは置換する必要がありません。