【发布时间】:2020-04-20 19:30:34
【问题描述】:
我有一个带有假定形状数组的子例程,其中还包含一个内部函数:
subroutine test(x)
real x(:)
contains
function a()
end
end
当我尝试使用 f2py (f2py -c test.f90 -m test) 编译它时,会打印以下错误:
gfortran:f77: /tmp/tmphb_l9bkr/src.linux-x86_64-3.7/test-f2pywrappers.f
/tmp/tmphb_l9bkr/src.linux-x86_64-3.7/test-f2pywrappers.f:11:10:
function a() ! in :test:test.f90:test
1
Error: Unclassifiable statement at (1)
/tmp/tmphb_l9bkr/src.linux-x86_64-3.7/test-f2pywrappers.f:13:13:
end function a
1
Error: Expecting END SUBROUTINE statement at (1)
但是,如果我删除了内部函数a(),或者为数组指定了一个明确的形状(例如real x(5)),它编译得很好。上面给出的代码有什么问题?
【问题讨论】:
-
欢迎您,请拨打tour。当您使用
end function时会发生什么?它曾经是必需的。您应该报告您的编译器版本并尝试最新版本。 -
上述代码sn-p和报错不一致。生成上述错误时,您能否发布您正在使用的实际代码。我还注意到字符 f77 表明这被视为 Fortran 77,其中不存在包含的函数,假设您实际使用的代码与您发布的代码相差不大,这将解释上述错误。我不知道 f2py,但这可能是 3 年前卡住了,假设 Fortran 77,
-
@IanBush 实际上,代码似乎与错误消息一致。那是因为代码经过 f2py 预处理器。