インテル® Fortran コンパイラー 17.0 デベロッパー・ガイドおよびリファレンス
モジュール変数または共通ブロックは、Fortran のエンティティーで BIND 属性を使用していて、そのメンバーも互換性がある場合、C グローバル変数と互換性があります。例えば、次のモジュールの c_extern、c2、com および single について考えてみます。
互換性の例 |
---|
module LINK_TO_C_VARS use, intrinsic :: ISO_C_BINDING integer(C_INT), BIND(C) :: c_extern integer(C_LONG) :: c2 BIND(C, name=’myVariable’) :: c2 common /com/ r,s real(C_FLOAT) :: r,s,t BIND(C) :: /com/, /single/ common /single/ t end module LINK_TO_C_VARS |
これらは、次の C 外部変数と互換性があります。 |
---|
int c_extern; long myVariable; struct {float r, s;} com; float single; |
グローバル引数のアクセス例 |
---|
MODULE Examp integer, BIND(C)::idata(20) real::rdata(10) END MODULE |
Fortran の変数は、標準の BIND C 属性を使用して、さまざまなグローバル引数にアクセスすることができます。
上記のコードでは、次の 2 つの外部変数が作成されます (2 つ目の変数は大文字と小文字が区別され、適切に修飾されます): idata と foo_mp_rdata。
C との名前の不一致を解消するには、BIND 属性を使用します。
グローバル変数文の例 |
---|
int idata[20]; // declared as global (outside of any function) |
Fortran では、変数をグローバル変数 (COMMON) として宣言し、ほかの言語ではその変数を外部変数として参照できます。 |
---|
! Fortran の PI グローバル宣言 real pi_r COMMON /pi/ pi_r ! 共通ブロックと変数名 BIND(C)::/pi/ |
上記のコードでは、BIND(C) により、ターゲットの規則に基づいて名前が修飾され、小文字が使用されます。
C の場合、変数は次の文を使用して外部変数として参照されます。 |
---|
//pi への外部参照を含む C コード extern float pi; |
C が参照するグローバル変数名は、Fortran の共通ブロック内の変数名 (pi_r) ではなく、共通ブロック名 (pi) であることに注意してください。したがって、空白の (名前のない) 共通ブロックを使用して、C と Fortran の間でデータを参照することはできません。