Fortranでinterfaceを書く際の型の定義
次のCの関数をFortranから呼び出すFFIを書く必要があります
typedef struct {
int x, y;
} int2;
int2 f(int2 a) {
int2 b;
b.x = 2 * a.x;
b.y = 2 * a.y;
return b;
}
この関数を呼び出すためのFFIを次のように書いてみました(test.f03)
module mymod
type :: int2
integer :: x, y
end type
interface
function f(a) result(b)
type(int2) :: a, b
end function
end interface
end module
しかし以下のようなコンパイルエラーとなります
test.f03:8:16:
type(int2) :: a, b
1
Error: Derived type ‘int2’ at (1) is being used before it is defined
エラーメッセージは定義前にint2
型を使用していると読めますが、どのようにすれば(どこで定義すれば)interface内でint2を使うことが出来ますか?
使用したコンパイラ:
$ gfortran --version
GNU Fortran (GCC) 8.2.1 20181127
Copyright (C) 2018 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.