XL C/C++ には、さまざまな言語標準でサポートされるフィーチャーのほかに、使用可能度を高めて、 異なるプラットフォームへのプログラムの移植を容易にするための、言語拡張機能が含まれています。
ベース部分に対する拡張の概念を紹介するために、以下の言語仕様を "ベース言語レベ ル" として 参照します。
直交拡張機能 とは、既存の言語フィーチャーの振る舞い を変更することなく、ベース部分の上に 追加されるフィーチャーのことです。ベース・レベルに準拠している有効なプログラムは、このような拡張 機能を使用した場合も、依然として 正しくコンパイルされ、実行されます。プログラムはなおも有効で、その振る舞いは直交拡張機能 が存在しても以前と変わりません。 このような拡張機能は、対応する基本標準レベルとの整合性を持ってます。 無効なプログラムは、実行時およびコンパイラーが出す診断において、異なった振る舞いをする 可能性があります。
一方、非直交拡張機能 とは、既存構成のセマンティクスを変更したり、 ベースと競合する構文を 導入したりすることができる拡張機能のことです。ベースに準拠している有効なプログラムであっても、 非直交拡張機能を使用した場合に正しくコンパイル および実行されることが保証されません。このため、このような拡張機能を使用可能に するために、個々のコンパイラー・オプションが提供されます。
言語拡張機能を使用可能にするための -qlanglvl およびその関連コンパイラー・オプションについての詳細は、「XL C/C++ コンパイラー・リファレンス」 を参照してください。
移植を容易にするために、GNU C および C++ フ ィーチャーに対応する特定の言語拡張機能がインプリメントされました。 これらの拡張機能として、C89、C99、および C++98 に対する直交および非直交の拡張があります。これらは、前のセクションで 説明したとおり、-qlanglvl コンパイラー・オプションによって制御されます。
GNU C に関連する直交拡張機能の例は、関数宣言および定義で noreturn 関数属性を指定しています。 コンパイラーには、関数が戻らないことが伝えられ、これによってパフォーマンスがよくなるこ ともありますが、規格合致プログラムは、 このフィーチャーによる影響を受けることがありません。noreturn 関数属性のセマンティクスは、直交 です。
非直交拡張機能の例は、inline キーワードです。これが非直交である 理由は、現行の GNU C セマンティクスが C99 のセマンティクスと異なるからです。
XL C/C++ は、AltiVec ベクトル型を処理するための非直交言語フィーチャーをインプリメントします。
これらの拡張機能は、PowerPC プロセッサーの SIMD および並列処理機能を活用し、
関連する最適化手法を容易にするために、言語フィーチャーをサポートします。