インテル® Fortran コンパイラー 19.0 デベロッパー・ガイドおよびリファレンス

データ型

Fortran と C は多くの同じデータ型をサポートしますが、直接の相関性はありません。

1 つ異なるのは、Fortran には種別 (KIND) の概念があることです。C は、これらを別の型として扱います。例えば、Fortran の INTEGER 型を考えてみます。C には short int から long long int までさまざまな整数型があり、intptr_t のような専門の型もあります。Fortran では、これらの型に対応する種別がない場合があります。互換性のある C の integer 型ごとに、ISO_C_BINDING は、等価な INTEGER 種別の種別番号を示す名前付き定数 (PARAMETER) を宣言します。

単純な C の int 型を考えてみます。C_INT が ISO_C_BINDING で定義されている場合、この型は INTEGER(C_INT) に対応します。インテル® Fortran では、C の int は Fortran の INTEGER(4) に対応するため、値は常に 4 です。ほかの Fortran 実装では異なる種別番号を使用する場合があります。名前付き定数を使用すると移植性が保証されます。

次に、C の intptr_t 型を考えてみます。これはポインター (アドレス) を保持できる大きな整数です。インテル® Fortran では INTEGER(C_INTPTR_T) に相当します。32 ビット・アプリケーションをビルドする場合は INTEGER(4)、64 ビット・アプリケーションをビルドする場合は INTEGER(8) です。

Fortran には符号なしの整数型はないため、C の符号なし型に対する定数はありません。これらの型には互換性がありません

C の型の「種別」が Fortran 実装でサポートされていない場合、その型に対する名前付き定数は -1 として定義され、使用するとコンパイル時にエラーになります。

REAL、COMPLEX、LOGICAL および CHARACTER に対して定義される定数があります。REAL の場合、規格では C の long double 型が提示されます。この型は、インテル® Fortran でサポートしているさまざまなプラットフォームの、さまざまな C コンパイラーにより、異なる方法で実装されています。

確実に一致させるには、種別値の定数と C の対応する型を使用します。

Linux* 上のインテル® C/C++ コンパイラーでは、-mlong-double-128 コマンドライン・オプションを使用して、long double を IEEE 形式の 128 ビット浮動小数点データ型に強制できます。すべてのプラットフォームにおいて、インテル® C/C++ コンパイラーは、ソースコードで __float128 をサポートします。Windows* 上のインテル® C/C++ コンパイラーでは、コマンドライン・オプション /Qoption,cpp,--extended_float_types を使用して、ソースコードで _Quad 型をサポートします。

LOGICAL および CHARACTER は互換性のために特別な処理が必要です。Fortran 規格では、LOGICAL は (ISO_C_BINDING) C の _Bool 型に対応すると明記されていて、単一種別値 C_BOOL (インテル® Fortran では 1) を定義します。インテル® Fortran はデフォルトで、C とは異なる true/false で LOGICAL をテストします。C は false にゼロ、true に非ゼロを使用しますが、インテル® Fortran は true に -1 (すべてのビットをセット)、false にゼロを使用します。C との互換性のために LOGICAL 型を使用する場合は、解釈を C 形式に変更する fpscomp[:]logicals オプションを指定してください。standard-semantics オプションを指定した場合は自動的に含まれます。Fortran 2003 (またはそれ以降) の機能を使用する場合は常に、このオプションを指定することを推奨します。C 言語には文字列はありません。代わりに、単一文字の配列があります。Fortran では同じように文字列を表す必要があります。C の char 型に対応する KIND 値、C_CHAR が定義されています。ただし、長さ 1 の文字変数のみ互換性があります。詳細は、「プロシージャー」を参照してください。

派生型も互換性を持たせることができます。詳細および制限事項は、「派生型」を参照してください。

関連情報