ISO_C 結合モジュール

ISO_C_BINDING モジュールは、C 型、C データ・ポインターに対応する派生型 C_PTR、C 関数ポインター型に対応する 派生型 C_FUNPTR、および 4 つのプロシージャーと 互換性のあるデータ表示の kind 型付きパラメーターを表す、名前付き定数への アクセスを提供します。

kind 型付きパラメーターとして使用するための定数

表 27 は、Fortran 組み込み型と C 型との相互運用可能性を示しています。 特定の kind 型付きパラメーター値を持つ Fortran 組み込み型は、型と kind 型付きパラメーター値が C 型と同じ行に リストされている場合に、C 型と相互運用可能です。 文字型の場合に、相互運用を可能にするには、1 の値を持つ初期化式によって長さ型付きパラメーターを 省略したり、指定したりする必要もあります。 また、表にリストされている C 型と 相互運用可能な Fortran 型と型付きパラメーターの組み合わせは、リストされている C 型と互換性のある無条件の C 型とも相互運用可能です。

表 27. 相互運用可能な Fortran 型と C 型

Fortran 型 名前付き定数
(kind 型付きパラメーター)
C 型




INTEGER C_SIGNED_CHAR 1 signed char

C_SHORT 2 short

C_INT 4 int

C_LONG 4 (-q32 を指定)
8 (-q64 を指定)
long

C_LONG_LONG 8 long long

C_SIZE_T 4 (-q32 を指定)
8 (-q64 を指定)
size_t

C_INTPTR_T 4 (-q32 を指定)
8 (-q64 を指定)
intptr_t

C_INTMAX_T 8 intmax_t

C_INT8_T 1 int8_t

C_INT16_T 2 int16_t

C_INT32_T 4 int32_t

C_INT64_T 8 int64_t

C_INT_LEAST8_T 1 int_least8_t

C_INT_LEAST16_T 2 int_least16_t

C_INT_LEAST32_T 4 int_least32_t

C_INT_LEAST64_T 8 int_least64_t

C_INT_FAST8_T 1 int_fast8_t

C_INT_FAST16_T 4 int_fast16_t

C_INT_FAST32_T 4 int_fast32_t

C_INT_FAST64_T 8 int_fast64_t




REAL C_FLOAT 4 float

C_DOUBLE 8 double

C_LONG_DOUBLE 16 long double

C_FLOAT_COMPLEX 4 float _Complex

C_DOUBLE_COMPLEX 8 double _Complex

C_LONG_DOUBLE_COMPLEX 8 long double _Complex




LOGICAL C_BOOL 1 _Bool




CHARACTER C_CHAR 1 char

たとえば、C_SHORT の kind 型付きパラメーターを持つ整数型は、C 型の short または (typedef を介して) short から派生した任意の C 型と相互運用可能です。

注:

  1. ISO_C_BINDING モジュールの名前付き定数の型は INTEGER(4) です。

  2. Fortran COMPLEX エンティティーを、gcc でコンパイルされる C コードにある、対応する C _Complex と相互運用可能に するには、Fortran コードを -qfloat=complexgcc を使用してコンパイルする必要があります。

  3. Fortran REAL(C_LONG_DOUBLE) および COMPLEX(C_LONG_DOUBLE_COMPLEX) エンティティーは、C コードが と 16 バイトの long double を使用可能にするオプションを使用してコンパイルされる場合にのみ、対応する C 型と相互運用可能です。

  4. C_LONG_LONG、C_INT64_T、C_INT_LEAST64_T、C_INT_FAST64_T、および C_INTMAX_T の kind 型付きパラメーター値を持つ Fortran 整数エンティティーは、C コードが -qnolonglong でコンパイルされる場合には、対応する C 型と 相互運用可能ではありません。

文字定数

エスケープ・シーケンスを使用して表される一般的な一部の C 文字との互換性を 確保するには、次の文字定数を指定します。

表 28. Fortran 名前付き定数と C 文字

Fortran 名前付き定数 定義 C 文字
C_NULL_CHAR ヌル文字 '¥0'
C_ALERT アラート '¥a'
C_BACKSPACE バックスペース '¥b'
C_FORM_FEED 用紙送り '¥f'
C_NEW_LINE 改行 '¥n'
C_CARRIAGE_RETURN 改行 '¥r'
C_HORIZONTAL_TAB 水平タブ '¥t'
C_VERTICAL_TAB 垂直タブ '¥v'

その他の定数

定数 C_NULL_PTR の型は C_PTR で、C のヌル・データ・ポインターの値を持ちます。 定数 C_NULL_FUNPTR の型は C_FUNPTR で、C のヌル関数ポインターの値を持ちます。

C_PTR は、任意の C データ・ポインター型と相互運用可能です。 型 C_FUNPTR は、任意の C 関数ポインター型と相互運用可能です。 これらは両方とも、プライベート・コンポーネントを持つ派生型です。

プロシージャー

C プロシージャー引き数は、C アドレスという形で定義されることがよくあります。 ISO_C_BINDING モジュールは、以下のプロシージャーを提供します。 Fortran プログラムが C アドレスを比較できるように、C_ASSOCIATED 関数を指定します。 C_F_POINTER サブルーチンは、Fortran ポインターを C ポインターの ターゲットと関連付ける方法を提供します。 Fortran アプリケーションが C 機能で使用するための適切な値を判別できるように、C_FUNLOC および C_LOC 関数を指定します。

C_ASSOCIATED(C_PTR_1[, C_PTR_2])

目的

C_PTR_1 の関連状況、または C_PTR_1C_ PTR_2 が 同じエンティティーと関連付けられているかどうかを示します。

クラス

照会関数

引き数の型と属性

C_PTR_1
必須。型 C_PTR または C_FUNPTR のスカラー。

C_PTR_2
オプション。C_PTR_1 と同じ型のスカラー。

結果の値と属性

デフォルトの論理値

結果の値

C_F_POINTER(CPTR, FPTR [, SHAPE])

目的

データ・ポインターを C ポインターのターゲットに関連付け、その形状を指定します。

クラス

サブルーチン

引き数の型と属性

CPTR
INTENT(IN) 引き数。スカラーで、型 C_PTR です。

FPTR
ポインターである INTENT(OUT) 引き数です。

SHAPE
オプションの整数型の INTENT(IN) 引き数で、ランクは 1 です。 存在する場合は、そのサイズは FPTR のランクと等しくなります。 SHAPE は、FPTR が配列である場合のみ指定します。

規則

CPTR の値が、相互運用可能なデータ・エンティティーの C アドレスである 場合は、次のようになります。

その他の場合は、CPTR の値は、相互運用不可能な引き数 X を持つ C_LOC への参照の 結果になります。 C_LOC への参照の後 RETURN または END ステートメントが実行されるため、X (またはそのターゲット) を割り当て解除したり、未定義にしたりすることはできません。 FPTR は、X と同じ型および 型付きパラメーターを持つ非ポリモアフィックのスカラー・ポインターです。 これは、X (または X がポインターである場合は そのターゲット) に関連付けられるポインターになります。

C_FUNLOC(X)

目的

関数ポインターの C アドレスを戻します。

クラス

照会関数

引き数の型と属性

X
必要な相互運用可能プロシージャー

結果の値と属性

型 C_FUNPTR のスカラー

結果の値

引き数の C アドレスを表す型 C_FUNPTR の値です。

C_LOC(X)

目的

引き数の C アドレスを戻します。

クラス

照会関数

引き数の型と属性

X
必須であり、次のいずれかになります。

結果の値と属性

C_PTR のスカラー

結果の値

引き数の C アドレスを表す型 C_PTR の値です。 IBM Copyright 2003