我有一个返回数组的函数,比方说
function f(A)
implicit none
real, intent(in) :: A(5)
real, intent(out) :: f(5)
f = A+1
end
Run Code Online (Sandbox Code Playgroud)
我的问题是,如何f在主程序单元中定义?例如
program main
implicit none
real :: A(5)
real, dimension(5), external :: f ! does not work
...
end
Run Code Online (Sandbox Code Playgroud)
你需要一个明确的界面.你可以通过几种方式实现这一目标.
明确地在调用的范围单元中f:
interface
function f(A)
implicit none
real, intent(in) :: A(5)
real :: f(5)
end function
end interface
Run Code Online (Sandbox Code Playgroud)将函数作为内部函数放在程序主机作用域中:
program main
...
contains
function f(A)
implicit none
real, intent(in) :: A(5)
real :: f(5)
f = A+1
end
end program
Run Code Online (Sandbox Code Playgroud)将功能放在一个模块中:
module A
contains
function f(A)
implicit none
real, intent(in) :: A(5)
real :: f(5)
f = A+1
end
end module
program main
use A
...
end program
Run Code Online (Sandbox Code Playgroud)使用具有相同参数的不同过程的显式接口,并返回类型,种类和等级.
program main
interface
function r5i_r5o(r5)
implicit none
real, intent(in) :: r5(5)
real :: r5i_r5o(5)
end function
end interface
procedure(r5i_r5o) :: f
...
end program
function f(A)
implicit none
real, intent(in) :: A(5)
real :: f(5)
f = A+1
end
Run Code Online (Sandbox Code Playgroud)最简洁的方法是使用模块选项#3.这为您提供了自动显式接口的好处(不需要在您调用的任何地方执行选项#1 f),并且在使用模块的任何地方都可以使用您的功能,而不是像选项#2那样限于特定的作用域单元.如果有许多具有相同参数和返回类型的过程,则选项#4可以很方便,因为可以为所有这些过程重用一个显式接口.
| 归档时间: |
|
| 查看次数: |
754 次 |
| 最近记录: |