24小时热门版块排行榜    

查看: 2065  |  回复: 5

学虫dj

金虫 (正式写手)

[求助] FORTRAN中不定个数传递参数 已有2人参与

我知道fortran中的函数在不定个数传递参数时应该使用interface来给子程序设定一个接口,现在的问题是:
1,函数中的形参是不确定大小的数组时,应该怎么设置这个interface
2,这个将要被调用的函数是在一个模块里,而调用他的函数在另一个模块里,这时interface怎么设置
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

穷则独善其事,达则兼济天下
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

linrn

至尊木虫 (著名写手)

【答案】应助回帖

感谢参与,应助指数 +1
函数中的参数在定义时加上  optional,如
subroutine aaa(a,b,c)
real(kind=8),intent(inout):: a,b
real(kind=8),intent(inout),optional::c
...
end subroutine
在函数中需要使用参数c的时候,需要用logical present(c)来判别是否输入c这个参数。


调用的时候可以写成
call  aaa(a,b,c)
或者
call aaa(a,b)
2楼2014-04-09 21:13:22
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

学虫dj

金虫 (正式写手)

引用回帖:
2楼: Originally posted by linrn at 2014-04-09 21:13:22
函数中的参数在定义时加上  optional,如
subroutine aaa(a,b,c)
real(kind=8),intent(inout):: a,b
real(kind=8),intent(inout),optional::c
...
end subroutine
在函数中需要使用参数c的时候,需要用logic ...

我的程序中就是这样写的,但是貌似不行。我的程序里面会判断是否给了c,如果没有给,那就自动赋值,但是执行结果是没有地址
穷则独善其事,达则兼济天下
3楼2014-04-11 10:10:09
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

btx97

金虫 (小有名气)

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★
感谢参与,应助指数 +1
学虫dj: 金币+10 2014-04-16 15:20:28
学虫dj: 回帖置顶 2014-04-16 15:21:24
1. Module里面的所有subprogram在用的时候是不需要interface的。比如在MODULE B中要用module A里的所有子程序,只需要在MODULE B中写上USE A就行了,不需要INTERFACE。因为,一定程度上,可以把MODULE中的子程序当成在所用程序中的后面加了contain的内部子程序。

2. 可选参数为不定大小的数组时可以这样定义子程序。
subroutine aaa(a,b)
      real :: a
      real, optional :: b(
      .....
end
4楼2014-04-11 16:46:38
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

btx97

金虫 (小有名气)

real, optional :: b( : )
5楼2014-04-11 16:47:17
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

学虫dj

金虫 (正式写手)

学虫dj: 回帖置顶 2014-04-16 15:21:18
引用回帖:
4楼: Originally posted by btx97 at 2014-04-11 16:46:38
1. Module里面的所有subprogram在用的时候是不需要interface的。比如在MODULE B中要用module A里的所有子程序,只需要在MODULE B中写上USE A就行了,不需要INTERFACE。因为,一定程度上,可以把MODULE中的子程序当成 ...

谢谢  就是这样的  放在模块里就不用接口了
穷则独善其事,达则兼济天下
6楼2014-04-16 15:20:16
已阅   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 学虫dj 的主题更新
信息提示
请填处理意见