#pragma langlvl ディレクティブは、コンパイルで使用される C 言語レベルを選択します。
ここで、language については、以下で説明します。
C プログラムの場合、以下のいずれかの値を language に指定できます。
classic 非 stdc89 プログラムのコンパイルを許可し、K&R レベルのプリプロセッサーに厳密に適合させます。 extended RT コンパイラーおよび classic との互換性を提供します。この言語レベルは C89 に基づいています。 saa 現行の SAA C CPI 言語定義に適合するコンパイルです。これは現在は SAA C レベル 2 です。 saal2 SAA C レベル 2 CPI 言語定義に適合するコンパイルです。これにはいくつかの例外があります。 stdc89 ANSI C89 標準に適合するコンパイルで、ISO C90 としても知られています。 stdc99 ISO C99 標準に適合するコンパイルです。 extc89 コンパイルは、ANSI C89 標準に適合しており、インプリメンテーション固有の言語拡張を受け入れます。 extc99 コンパイルは、ISO C99 標準に適合しており、インプリメンテーション固有の言語拡張を受け入れます。
デフォルトの言語レベルは、コンパイラーの呼び出しに使用するコマンドに応じてそれぞれ異なります。
- 呼び出し
- デフォルトの言語レベル
- xlc
- extc89
- cc
- extended
- c89
- stdc89
- c99
- stdc99
この pragma は、1 つのソース・ファイル内に 1 回だけ指定することができます。また、必ずソース・ファイル内のどの非コメント・ステートメントよりも前に置かなければなりません。
コンパイラーは、ヘッダー・ファイル内の事前定義マクロを使用して、指定された言語レベルを定義する宣言および定義を使用可能にします。
このディレクティブは、プリプロセッサーの動きを動的に変更することができます。結果として、-E コンパイラー・オプションを指定してコンパイルすると、 -E オプションを指定しないでコンパイルしたときに生成される結果とは異なる結果を生成する場合があります。
「C/C++ ランゲージ・リファレンス」の『IBM C
言語拡張機能』および『IBM C++
言語拡張機能』のセクションも参照してください。