言語レベルと言語拡張

本書で説明する C 言語および C++ 言語は、標準および仕様にリストされている標準に基づいています。

基本と拡張という考え方を取り入れるために、以下の言語仕様を「基本言語レベル」と 呼ぶことにします。
  • C++11
  • C++03
  • C++98
  • C99
  • C89

本書で用語 K&R C を使用した場合、それは、C 言語と、C の ISO 標準化の前に使用されていた、Brian Kernighan および Dennis Ritchie が作成 し、広く受け入れられていた拡張機能を合わせたものを指します。

基本レベルでサポートされる機能に加えて、XL C/C++ は、使用可能度を向上させ、異なるプラ ットフォームにプログラムを移植しやくする、次のような言語拡張機能が組み込まれています。
コンパイルに使用する言語レベルは、次のようないくつかの仕組みによってユーザーが制御す ることができます。

基本呼び出しコマンド xlc (C の場合) および xlc++ または xlC (C++ の場合) を使用してコンパイルする場合、いくつかの例外はありますが、言語拡張機能のほとんどすべてがサポートされ ます。

呼び出しコマンド xlc のデフォルトの言語レベルは extc99 です。これには、C99 標準により導入された機能のすべて、および本書で説明するほとんどの IBM 拡張が組み込まれています。C 拡張機能およびそれらを使用可能にするさまざまな方法の完全なリストについては、IBM XL C 言語拡張機能を参照してください。

呼び出しコマンド xlC または xlc++ のデフォルトの言語レベルが拡張され、本書で説明するほとんどの IBM® 拡張、および C99 の機能の多くが組み込まれるようになりました。C++ 拡張機能およびそれらを使用可能にする方法の完全なリストについては、IBM XL C++ 言語拡張機能を参照してください。

コンパイルの言語レベルを制御するさまざまな方法については、『コンパイラーの呼び出し』および -qlanglvl を参照してください。

C11 標準機能に関連する拡張機能

C11
注: IBM は、C11 の選択された機能 (C1X と呼ばれる) をその承認の前にサポートします。IBM は、この標準の機能の開発および実装を継続します。この言語レベルの実装は、IBM による標準の解釈に基づいています。 新しい C11 標準ライブラリーのサポートを含め、すべての C11 機能を IBM が実装し終えるまで、 リリースごとに実装が変更される可能性があります。IBM では、IBM による C11 機能の実装に関し、ソース、バイナリー、リスト作成などのコンパイラー・インターフェースにおいて、以前のリリースとの互換性を維持するための試みは特に行いません。
C11

XL C/C++ は、C11 に完全に準拠するための段階を踏まえた継続的なリリース・プロセスの一環として、現在インプリメントされている C11 機能をサポートします。XL C/C++ でサポートされる C11 機能の全リストが、C11 互換性に掲載されています。

C++11 標準機能に関連する拡張機能

C++11
注: IBM は、C++11 (承認前の呼称は C++0x) の、選定された機能をサポートしています。IBM は、この標準の機能の開発および実装を継続します。この言語レベルの実装は、IBM による標準の解釈に基づいています。 新しい C++11 標準ライブラリーのサポートを含め、すべての C++11 機能を IBM が実装し終えるまで、リリースごとに実装が変更される可能性があります。IBM では、IBM による新規 C++11 機能の実装に関し、ソース、バイナリー、リスト作成などのコンパイラー・インターフェースにおいて、以前のリリースとの互換性を維持するための試みは、特に行いません。
C++11

XL C/C++ は、C++11 に完全に準拠するための段階を踏まえた継続的なリリース・プロセスの一環として、現在インプリメントされている C++11 機能をサポートします。XL C++ でサポートされる C++11 機能の全リストが C++11 互換性 に掲載されています。

C99 標準機能および C11 標準機能をサポートするための C++ 拡張機能

C99 言語の標準および C11 言語の標準に指定されている機能のうち、C++ 言語の仕様に含まれないものが多数あります。C++ と C99 間、または C++ と C11 間の互換性および移植性を促進するために、XL C++ コンパイラーでは、XL C コンパイラーでサポートされる C99 および C11 の機能の多くを使用可能にしています。 これらの機能は C++ 標準を拡張するため、基本言語に対する拡張機能とみなされます。 この解説書では、ある機能が C 、C99、または C11 でのみサポートされることを示すテキストが明示されていない限り、C99 および C11 の機能は C++ にも適用されます。 XL C++ でサポートされる C99 および C11 の機能の全リストが C99 との互換性のための拡張機能 および C11 との互換性のための拡張機能 に掲載されています。

GNU C および GNU C++ に関連する拡張機能

移植を容易にするために、GNU C および GNU C++ フ ィーチャーに対応する特定の言語拡張機能がインプリメントされました。これらの拡張機能には、C89、C99、C++98、C++03、および C++11 に対する拡張機能が含まれます。 本書全体にわたって、GNU C および GNU C++との互換性のために実装された IBM 拡張機能は、テキストで明記されています。 これら拡張機能の全リストは、GNU C 互換性の拡張機能 および GNU C++ 互換性の拡張機能 (C++ のみ) にあります。

AltiVec プログラミング・インターフェースをサポートおよび拡張する拡張機能

XL C/C++ は、ベクトルのサポートが有効である場合、ベクトル型をサポートします (また AltiVec ベクトル型を拡張します)。これらの言語拡張機能は 、 の PowerPC® プロセッサーの SIMD および並列処理機能を活用し、関連する最適化手法を容易にします。IBM インプリメンテーションの AltiVec プログラミング・インターフェース仕様は、その大部分が GNU C インプリメンテーションの構文とセマンティクスに一致する拡張インプリメンテーションです。本書に記載されたテキストでベクトル拡張機能の動作について説明していますが、その他にも、AltiVec プログラミング・インターフェースに対する IBM 拡張のリストが、ベクトル処理の拡張機能サポートに記載されています。

ユニコードをサポートする拡張機能

ユニコード規格 は、書かれた文字と テキストに対するコード化スキームの仕様です。 ユニコード規格は、マルチリンガル・テキストのエンコードに整合性を持たせ、 矛盾を起こさずにテキスト・データを国際的に交換できるように した汎用の規格です。 ISO C および ISO C++ 委員会は、ユニコード UTF-16 および UTF-32 文字リテラルをサポートするために、それぞれ u-literals および U-literals のインプリメンテーションを承認しました。詳細については、Unicode の拡張機能サポートを参照してください。