この節では、C および C++ プログラム言語のインプリメンテーションと、XL C/C++ によって 提供される言語拡張機能について説明します。
XL C/C++ を使用すると、移植性を重視したプログラミングを行うことができます。 プログラム言語の完全な仕様は、構文とセマンティクスから構成されますが、 インプリメンテーション時に言語拡張機能が使用されるため、特定言語仕様 の準拠するインプリメンテーションはそれぞれ異なる可能性があります。
言語仕様に厳密に準拠するプログラムは、異なる環境間で最大の移植性を発揮します。 理論上、標準に準拠した、あるコンパイラーで正 しくコンパイルされ、拡張機能またはインプリメンテーション定義動作を 使用しないプログラムは、ハードウェアの差異が許す範囲内で、 他のすべての標準準拠のコンパイラーの下で適切にコンパイルされ、作動します。 言語インプリメンテーションによって提供される言語への拡張機能を正しく活用したプログラムは、そのオブジェクト・コードの 効率性を向上させることができます。
XL C/C++ は、ISO/IEC 国際規格 14882:2003(E) と整合しています。 この規格は、書式を指定し、C++ プログラム言語で作成されたプログラムの解釈を確立するものです。 この国際規格は、さまざまなインプリメンテーション間で、C++ プログラムの移植性を 促進するために設計されています。 ISO/IEC 14882:1998 は最初の C++ 言語でした。
ISO/IEC 9899:1990 国際規格 (C89 として知られる) では、 書式を指定し、C プログラミング言語で作成されたプログラムの解釈を確立しています。 この規格は、さまざまなインプリメンテーション間で、C プログラムの移植性をプロモートするために設計されています。 この規格は、ISO/IEC 9899/COR1:1994、ISO/IEC 9899/AMD1:1995、および ISO/IEC 9899/COR2:1996 で修正されました。 修正および訂正された C89 規格をソース・コードが厳密に順守しているかを確認するには、 コンパイラー・オプション -qlanglvl=stdc89 を指定してください。
ISO/IEC 9899:1999 国際規格 (C99 としても知られる) は C プログラミング言語で作成されたプログラム用の、更新 された規格です。これは、C 言語の機能を拡張し、C89 へ説明を提供し、技術修正を具体化するために設計されています。 XL C/C++ は、この言語規格の多くのフィーチャーをサポートします。
C コンパイラーは、C99 規格で指定される
すべての言語フィーチャーをサポートしています。
この言語フィーチャーのセットをソース・コードが順守しているかを確認するには
、c99 呼び出しコマンドを使用してください。
また、この規格では、ランタイム・ライブラリーのフィーチャーも指定していることに注意してください。
これらのフィーチャーは、現行のランタイム・ライブラリーおよびオペレーティング環境ではサポートされないことがあります。
システム・ヘッダー・ファイルが使用可能かどうかにより、
これらのフィーチャーがサポートされているかどうかが分かります。
XL C/C++ はすべての C99 言語フィーチャーをインプリメントしています。以下は、選択した主なフィーチャーの表です。
IBM C に対する ISO/IEC 9899:1999 国際規格の拡張 | |
C99 フィーチャー | 関連参照 |
---|---|
ポインター用の restrict 型修飾子 | restrict 型修飾子 |
汎用文字名 | ユニコード規格 |
定義済み ID __func__ | 事前定義済み ID |
変数と空引き数を持つ関数類似マクロ | 関数類似マクロ |
_Pragma 単項演算子 | _Pragma 演算子 |
可変長配列 | 可変長配列 |
配列指標宣言内での static キーワード | 配列 |
complex データ型 | 複素数型 |
long long int と unsigned long long int 型 | 整変数 |
16 進浮動小数点定数 | 16 進浮動小数点定数 |
集合体型の複合リテラル | 複合リテラル |
指定された初期化指定子 | 初期化指定子 |
C++ 形式のコメント | コメント |
許可されない暗黙の関数宣言 | 関数宣言 |
混合宣言とコード | for 文 |
_Bool 型 | 単純型指定子 |
inline 関数宣言 | インライン関数 |
集合体の初期化指定子 | 指定された初期化指定子を使用した配列の初期化 |
C99 規格の一部の仕様は、言語の新しいフィーチャーに基づくものではなく、C89 規格を変更し、 より明確にしたものです。XL C/C++ は、以下を含むすべての C99 言語フィーチャーをサポートしています。
関連参照
ISO/IEC 9899:1999 国際規格 (C99) のいくつかのフィーチャーは、C++ でもインプリメントされます。これらの拡張は -qlanglvl=extended コンパイラー・オプションを指定すると有効になります。
IBM C++ に対する ISO/IEC 9899:1999 国際規格の拡張 | |
C99 フィーチャー | 参照 |
---|---|
ポインター用の restrict 型修飾子 | restrict 型修飾子 |
汎用文字名 | ユニコード規格 |
定義済み ID __func__ | 事前定義済み ID |
可変長配列 | 可変長配列 |
complex データ型 | 複素数型 |
16 進浮動小数点定数 | 16 進浮動小数点定数 |
集合体型の複合リテラル | 複合リテラル |
変数と空引き数を持つ関数類似マクロ | 関数類似マクロと可変数引き数マクロの拡張 |
_Pragma 単項演算子 | _Pragma 演算子 |
-qlanglvl コンパイラー・オプションは、 サポートしている言語レベルを指定するために使用され 、そのためユーザーのコードがコンパイルされる方法に影響を与えます。 別のコンパイラー呼び出しコマンドを使用して、 暗黙的に言語レベルを指定することもできます。 一般に、標準言語レベルの下で正しくコンパイルされ、実行される有効なプログラムは 使用可能な直交拡張機能を使用して同じ結果を生成するために、 正しくコンパイルし、実行されるはずです。
例えば、ISO/IEC 9899:1990 国際規格 (C89) に厳密に準拠する方法で C プログラムを コンパイルするには、-qlanglvl=stdc89 を指定する必要があります。stdc89 サブオプションは、 コンパイラーが規格に厳密に準拠し、どの言語拡張機能の使用も許可しないことを指示します。(c89 コンパイラー呼び出しコマンド は、この言語レベルを暗黙的に指定します。)
標準言語レベルに拡張機能を使用することもできます。標準フィーチャーに干渉しない 拡張機能は直交 拡張機能と呼ばれます。例えば、C プログラムを コンパイルする場合、-qlanglvl=extc89 を指定して、C89 に直交する拡張機能を使用可能にできます。
ISO/IEC 9899:1999 国際規格 (C99) で説明されている言語フィーチャーのほとんどは、C89 への直交拡張機能と見なされます。
一方では、直交以外の 拡張機能は、 国際規格の 1 つに記載されているように、言語の観点から 干渉され、競合することがあります。 これらの拡張機能は、明示的に特定のコンパイラー・オプションで 使用可能にしなければなりません。 非直交拡張機能に依存すると、 異なる環境へのアプリケーションの移植が容易にできなくなります。
-qlanglvl オプションの主なサブオプションは、以下にリストされています。
選択した -qlanglvl サブオプション | |
-qlanglvl サブオプション | サブオプションの説明 |
---|---|
-qlanglvl=stdc99 |
C99 標準への厳密な合致を指定します。
|
-qlanglvl=stdc89 |
C89 標準への厳密な合致を指定します。
|
-qlanglvl=extc99 |
C99 に直交するすべての拡張機能を使用可能にします。
|
-qlanglvl=extc89 |
C89 に直交するすべての拡張機能を使用可能にします。
|
-qlanglvl=extended |
C89 に直交するすべての拡張機能を使用可能にし
、-qupconv コンパイラー・オプションを指定します。
|
関連参照