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

グローバルデータの概要

モジュール変数または共通ブロックは、Fortran のエンティティーで BIND 属性を使用していて、そのメンバーも互換性がある場合、C グローバル変数と互換性があります。例えば、次のモジュールの c_externc2com および 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 つ目の変数は大文字と小文字が区別され、適切に修飾されます): idatafoo_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 の間でデータを参照することはできません。

関連情報