3

以下はgfortranまたはf95で機能しますが、ifortでは機能しません。

  interface add
     procedure addr, addi
  end interface add

  real a, b
  integer i, j

  data a, b, i, j /1.0, 2.0, 1, 2/


  call add(a,b)
  call add(i,j)

  stop
  contains 

  subroutine addr(x,y)
  real x, y
  print *, x+y
  return
  end subroutine addr

  subroutine addi(m, n)
  integer m, n
  print *, m+n
  return
  end subroutine addi

  end

ifortはこのエラーを返します:

  error #6643: This statement is incorrectly positioned.
            procedure addr, addi
   ---------^
  error #8168: Parentheses are required after the PROCEDURE keyword.
            procedure addr, addi
  ---------^

どのモジュールプロシージャも使用できず(モジュールにaddrとaddiを含めたくない)、ifortをコンパイラとして使用する必要があると想定します。どんな助けでもいただければ幸いです。

4

1 に答える 1

4

Intel Fortran 12.1.5は、先頭にMODULEキーワードがない場合、procedure-stmt(エラーが参照するインターフェイスブロック内のステートメント)の形式または意味をサポートしていません。

(その結果、コンパイラーはその行をprocedure-declaration-stmtとして分類しました-したがって、2つのエラーです。)

先頭モジュールのないプロシージャステートメントの形式はFortran2003標準で導入され、汎用インターフェイスの背後にある特定のプロシージャとして内部プロシージャを持つ機能がFortran2008標準で導入されました。

IntelFortranがその特定のFortran2008機能をサポートするまで、モジュールプロシージャを使用できないというあなたの述べられた要件を考えると、回避策はありません。

于 2012-07-31T03:49:14.637 に答える