インテル® Fortran コンパイラー 14.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;

Fortran の変数は、標準の BIND C 属性を使用して、さまざまなグローバル・パラメーターにアクセスすることができます。 次に例を示します。

    MODULE Examp
      integer, BIND(C)::idata(20)
      real::rdata(10)
    END MODULE

上記のコードでは、次の 2 つの外部変数が作成されます (2 つ目の変数は大文字と小文字が区別され、適切に修飾されます): idatafoo_mp_rdata

C との名前の不一致を解消するには、BIND(C,name=<string>) 属性を使用します。

C の場合、変数は次の文を使用してグローバル変数として宣言されます。

  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 の間でデータを参照することはできません。


このヘルプトピックについてのフィードバックを送信