付録 A. IBM C 言語拡張機能

この付録では、IBM C 拡張機能をカテゴリーに分けて表します。大きなカテゴリーの分類基準は 、拡張機能がベース言語に対して直交であるか、または非直交であるかです。 直交の拡張機能は、ベース言語を妨害しません。直交の拡張機能は、extendedextc89、 または extc99 のいずれか 1 つの拡張モードでコンパイルすると、まとめて使用可能になります。 extended モードは、C89 に基づいています。

これに対し、非直交の拡張機能は、ベース言語フィーチャーの構文またはセマンティクスを変更する可能性があります。したがって、ベース言語に対して非直交 であるか、または GNU C インプリメンテーションと競合するような IBM C 拡張機能は、それぞれ明示的に指定する必要があります。

肯定および否定の langlvl サブオプションの構文は、以下のとおりです。

-qlanglvl=lang_suboption
-qlanglvl=nolang_suboption

オプションおよびサブオプションでは、大文字と小文字は区別されません。


直交拡張機能

直交の IBM C 拡張機能は、以前のリリースの個々のオプション・コントロールが備わった 言語フィーチャー、C99 フィーチャーとしての拡張機能、および GNU C に関連する 拡張機能という、3 つのサブグループに分類されます。

個々のオプション・コントロールが備わった既存の IBM C 拡張機能

C89 に対して直交である既存の言語フィーチャーの中には、 肯定および否定の各のオプション・コントロールが備わっているものもあります。 下位互換性を保つために、これらのコンパイラー・オプションおよびサブオプションのサポートは保持する必要があります。 フィーチャーを重複して使用可能にしても、その使用可能状態は変更されません。


個々のオプション・コントロールが備わった IBM C 言語拡張機能
言語拡張機能 コンパイラー・オプション 注釈
ID 中のドル記号 -qdollar すべてのレベルで受け入れられます。
UCS -qlanglvl=ucs 否定の設定である -qlanglvl=noucs は STDC99 により無視され、通知メッセージが出されます。
二重字表記文字 -qdigraph 否定の設定である -qnodigraph は STDC99 により無視され、通知メッセージが出されます。

IBM C 拡張機能: C89 の拡張機能としての C99 フィーチャー

C99 に関連する言語フィーチャーのほとんどは、C89 に対して直交です。ただし、restrict キーワードは例外であり、ユーザーの可変ネーム・スペースを侵害します。-qkeyword=restrict オプションを使用することにより、明示的にサポートを要求することができます。


C89 の拡張機能としての C99 フィーチャー
言語フィーチャー 注釈
restrict 型修飾子 制限付きポインターを定義します。
可変長配列 -qlanglvl=c99vla
フレキシブルな配列メンバー C99 では、フレキシブルな配列メンバーが構造体の末尾にのみ許可されています。GNU C では、これは構造体のいずれの場所にも許可されます。
複素数データ型のサポート
long long int
16 進浮動小数点定数のサポート
暗黙の int の除去
整数除法の詳細な定義 ゼロに切り捨て。
汎用文字名
拡張 ID 内部名および外部名に対する制限が除去されました。
複合リテラル
指定の初期化指定子
C++ 形式のコメント
暗黙の関数宣言の除去
intmax_t/uintmax_t で実行されるプリプロセッサー演算
混合宣言とコード
選択および繰り返しステートメントに対する新規のブロック・スコープ
整数定数型ルール long long int 型に対応するため。
整数プロモーション・ルール long long int 型に対応するため。
vararg マクロ 可変引き数を持つ、関数に似たマクロ。
enum 宣言内での末尾のコンマの許可
_Bool 型の定義
べき等の型修飾子 「重複する型修飾子」とも呼ばれます。
空のマクロ引き数
追加の事前定義マクロ名
_Pragma プリプロセス演算子
標準プラグマ #pragma STDC FP_CONTRACT#pragma STDC FENV_ACCESS#pragma STDC CX_LIMITED_RANGE
__func__ 事前定義 ID
UTF-16、UTF-32 リテラル

GNU C に関連する IBM C 拡張機能

IBM C コンパイラーは、GNU C 言語拡張機能の以下のサブセットを認識します。 以下のテーブルに使用されている説明ラベルは、GNU C のドキュメンテーションで使用されているラベルと類似しています。

GNU C に関連する IBM C 拡張機能
言語フィーチャー 注釈
式の中のステートメントおよび宣言
ローカルに宣言されたラベル
値としてのラベル 計算済み goto 文を含みます
ネストされた関数
typeof を持つ型の参照 代替スペルの __typeof__ が推奨されます。
一般化された左辺値
ダブルワードの整数
GNU C 複素数型
GNU C 16 進浮動小数点定数
長さゼロの配列
可変長の配列
引き数の変数番号を含むマクロ __VA_ARGS__ の代わりに ID を使用します。
左辺値でない配列が添え字を持つことができる
定数でない初期化指定子
複合リテラル
共用体型へのキャスト C のみ
関数の属性の宣言
非プロトタイプ定義をオーバーライドする関数プロトタイプ
位置合わせについて問い合わせるための __alignof__
変数の属性の指定
型の属性の指定
C 式のオペランドを含むアセンブラー命令
指定レジスター内の変数 コンパイラーは GNU 構文は受け入れますが、セマンティクスは無視します。
代替キーワード
#warning
#include_next

非直交拡張機能

非直交の IBM C 拡張機能は、以前のリリースの言語フィーチャー、C99 フィーチャーとしての 拡張機能、および GNU C に関連する拡張機能という、3 つのサブグループに分類されます。

個々のオプション・コントロールが備わった既存の IBM C 拡張機能

厳密には、IBM C 言語フィーチャーの upconv は非直交として分類されます。 ただし、これは extended 言語レベルの一部として自動的に使用可能になります。 これが、extendedextc89 の大きな違いです。

非直交の IBM C 言語拡張機能
言語拡張機能 コンパイラー・オプション 注釈
long long リテラル -qlonglit stdc99 により無視され、警告が出されます。
upconv -qupconv デフォルトでは -qlanglvl=extended 言語レベルで使用可能です。

IBM C 拡張機能: C89 の拡張機能としての C99 フィーチャー


非直交の IBM C 言語拡張機能
言語拡張機能 注釈
inline キーワード C89 および GNU C に対して非直交です。
フレキシブルな配列メンバー C99 では、フレキシブルな配列メンバーが構造体の末尾にのみ許可されています。GNU C では、これは構造体のいずれの場所にも許可されます。

GNU C に関連する IBM C 拡張機能


非直交の GNU C 拡張機能
言語拡張機能 コンパイラー・サブオプションおよび注釈
引き数の変数番号を含むマクロ 変数引き数が指定されていない場合、末尾のコンマを除去します。

AltiVec プログラミング・インターフェース・サポートの拡張機能

Linux Mac OS X
AltiVec Vector プログラミングの IBM C 拡張機能
言語拡張機能 コンパイラー・サブオプションおよび注釈
Vector プログラミング言語拡張機能 -qaltivec

AltiVec プログラミング・モデルをサポートするためのキーワード、マクロ、およびプラグマ。

IBM Copyright 2003