2

ifort を使用してステートメントの下でコードをコンパイルしようとすると、次のようなエラーが返されます。

    error #8169: The specified interface is not declare

しかし、gfortran では完全に動作します。何らかの理由で、インテル コンパイラを使用してこの作業をコンパイルする必要があります。私が使用している言語は Fortran です。これは、'ifort' コンパイラが Interface の変数を認識しないためです。そこで、それを修正するために Var というモジュールを開発しました。そして、すべてのブロックで使用してください。しかし、それはエラーを返します:

This USE statement is not positioned correctly within the scoping unit.

var モジュールは次のようなものです。

MODULE VAR
      CHARACTER(50) :: callbackID
END MODULE

どうすれば問題を解決できますか?私のコンパイラのバージョンは ifort 12.1.0 です

      MODULE DEMO
      USE VAR
      INTERFACE
        SUBROUTINE callback_prototype(callbackID)
            USE VAR
            CHARACTER(*) :: callbackID
        END SUBROUTINE callback_prototype
      END INTERFACE

      PROCEDURE( callback_prototype ), POINTER :: f_ptr => NULL()

      CONTAINS
      SUBROUTINE set_callback(func)
         IMPLICIT NONE
         EXTERNAL :: func

          f_ptr => func
          call HELLO
      END SUBROUTINE

      SUBROUTINE invoke_callback(callbackID)
          CHARACTER(*) :: callbackID
          if (associated(f_ptr)) call f_ptr(callbackID)
      END SUBROUTINE

      SUBROUTINE HELLO

      IMPLICIT NONE

      !dosomthing


      END SUBROUTINE
      END MODULE
4

2 に答える 2

2

提示されたコードは、正当な fortran ではありません。インターフェイス本体内の use ステートメントは、仮引数と同じ名前にアクセスできるようにします。これは、言語のスコープ規則に違反しています。

インターフェイス本体内の use ステートメントは不必要に見えます。

于 2013-11-07T21:19:00.793 に答える
1

そもそもインターフェイスに use ステートメントが必要な理由がわかりません。適切な手順にアクセスできるため、インターフェイスもスキップできます。

PROCEDURE( invoke_callback ), POINTER :: f_ptr => NULL()
于 2013-11-07T21:30:17.263 に答える