Oracle® Developer Studio 12.5: C ユーザーズガイド

印刷ビューの終了

更新: 2016 年 7 月
 
 

2.15 拡張機能

C コンパイラは、C 言語に多数の拡張機能を実装しています。

2.15.1 _Restrict キーワード

C コンパイラは、C99 規格の restrict キーワードの同義語として _Restrict キーワードをサポートします。_Restrict キーワードは、-pedantic が指定されていない場合は任意の -std フラグ値で使用できますが、restrict キーワードは、-std=c99 または -std=c11 と一緒にのみ使用できます。

サポートされる C11 機能の詳細は、C11 の機能を参照してください。

サポートされる C99 機能の詳細は、C99 の機能を参照してください。

2.15.2 __asm キーワード

__asm キーワード (先頭の 2 つの下線に注意) は、asm キーワードと同義語です。-pedantic が有効な場合、コンパイラは asm キーワードの使用について警告を発行します。これらの警告を回避するには __asm を使用します。__asm 文の書式は次のようになります。

__asm("string");

ここで、string は有効なアセンブリ言語文です。

この文は、与えられたアセンブラテキストをアセンブリファイルに直接出力します。関数スコープではなくファイルスコープで宣言された基本的な asm 文は、「グローバル asm 文」と呼ばれます。ほかのコンパイラはこの文をトップレベル asm 文と呼びます。

グローバル asm 文は、指定された順に出力されます。つまり、互いの相対的な順序が維持され、周囲の関数に対する相対位置も維持されます。

より高い最適化レベルでは、参照されていないと判断した関数をコンパイラが削除することがあります。グローバルアセンブリ言語文内からどの関数が参照されているかをコンパイラは評価できないため、間違って削除される可能性があります。

テンプレートとオペランドの仕様を提供する、拡張された asm 文は、グローバルにすることは許可されません。__asm および __asm__ はキーワード asm の同義語であり、互いに入れ替えて使用できます。

アーキテクチャーに固有の命令を指定するときは、対応する -xarch 値を指定してコンパイルエラーを回避する必要がある場合があります。

2.15.3 __inline__inline__

__inline および __inline__ はキーワード inline の同義語であり、互いに入れ替えて使用できます (C 規格、6.4.1 セクション)。

2.15.4 __builtin_constant_p()

__builtin_constant_p はコンパイラの組み込み関数です。これは単一の数値引数を取り、引数がコンパイル時の定数である場合は 1 を返します。戻り値 0 は、その引数がコンパイル時の定数であるかどうかをコンパイラが判定できないことを意味します。この組み込み関数の標準的な使用法は、マクロ内での手動のコンパイル時最適化です。

2.15.5 __FUNCTION____PRETTY_FUNCTION__

__FUNCTION____PRETTY_FUNCTION__ は事前に定義された識別子であり、字句を包含する関数の名前が含まれています。これらは、定義済みの識別子である __func__ に相当する機能です。Oracle Solaris プラットフォームでは、__FUNCTION____PRETTY_FUNCTION__ は、-Xs および -Xc モードの場合または -pedantic が有効な場合は使用できません。

2.15.6 untyped _Complex

拡張としての untyped _Complex は、デフォルト言語規格オプションでは、double _Complex にデフォルト設定されます。-pedantic (ANSI 以外の構文に対するエラー/警告に厳密に準拠) を指定すると、警告が生成されます。

2.15.7 __alignof__

__alignof__ 演算子では、オブジェクトの整列方法またはタイプによって通常必要となる最小の整列を照会することができます。この構文は、sizeof と同じようになります。

たとえば、__alignof__ (float) は 4 です。

__alignof__ のオペランドが型ではなくオブジェクトの場合、その値はその型の必要な整列で、__attribute__ 拡張に関連した整列を使用して指定されたすべての最小の配列が考慮されます。

2.15.8  __atomic 組み込み関数

Oracle Developer Studio C コンパイラは、メモリーモデルを認識した不可分操作のために gcc __atomic 組み込み関数を実装しています。