Fortran Coder

查看: 2513|回复: 4
打印 上一主题 下一主题

[子程序] 不能传递子程序名字

[复制链接]

3

帖子

1

主题

0

精华

新人

F 币
30 元
贡献
15 点
跳转到指定楼层
楼主
发表于 2021-12-13 21:41:04 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
env:ubuntu 20.04+ifort
CODE:
[Fortran] 纯文本查看 复制代码
program  main
  CALL B()
  CALL FKB(B)


contains
   subroutine B()
   IMPLICIT NONE
   write (*,*) 'fk'
   end subroutine B

   subroutine FKB(fcn)
   implicit none
   INTERFACE
      SUBROUTINE fcn()
      IMPLICIT NONE
      END SUBROUTINE fcn
   END INTERFACE
   write (*,*) '1'
   call B()
   write (*,*) '2'
   call fcn()
   write (*,*) '3'
   end subroutine FKB

end

很简单的程序,把子程序名字‘B' 通过'fcn'传递给子程序'FKB'里,编译也不报错,但是运行以后发现

ifort -g main.F90
./a.out

fk
1
fk
2
forrtl: severe (174): SIGSEGV, segmentation fault occurred
Image              PC                Routine            Line        Source
a.out              000000000040490A  Unknown               Unknown  Unknown
libpthread-2.31.s  00007F86D9BE53C0  Unknown               Unknown  Unknown
Unknown            00007FFFF6983F50  Unknown               Unknown  Unknown


显然调用'fcn'的时候出现了问题。
请问这到底是为什么?如何解决?


分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

3

帖子

1

主题

0

精华

新人

F 币
30 元
贡献
15 点
沙发
 楼主| 发表于 2021-12-13 22:05:19 | 显示全部楼层
或者有人能帮我试着跑一下可以么,看看报不报错

3

帖子

1

主题

0

精华

新人

F 币
30 元
贡献
15 点
板凳
 楼主| 发表于 2021-12-14 19:37:32 | 显示全部楼层
非常有启发性的建议。
实际上我写的东西是一个鲍威尔寻路解非线性方程组的MODULE,所以必须要传递函数名字。
MODULE里面再加MODULE,这个我不确定,但是的确提供了一种思路。
至于用Procedure去替代interface 我都没想过。。。。
太感谢你了,我好好鼓捣鼓捣
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-5-4 04:30

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表