Fortran Coder

查看: 569|回复: 5

[子程序] 定义外部函数要怎么调用?

[复制链接]

19

帖子

7

主题

0

精华

入门

F 币
107 元
贡献
62 点
发表于 2021-8-11 14:15:52 | 显示全部楼层 |阅读模式
各位大佬,我在主程序main外定义了一个外部函数,然后在主程序中调用,但是出现这个错误,这是咋回事??球球了!!感谢!!
以下是部分代码:
[Fortran] 纯文本查看 复制代码
program main
    implicit none
    real,external::vvmat(2,2)
    real dh0(2,2),v1(2)
    integer n
    n=2
    dh0=vvmat(v1,v1,n)
end program main

function vvmat(a,b,n)
implicit none
    integer n,i,j
    real(kind=dp) a(n),b(n),vvmat(n,n)
    do i=1,n
        do j=1,n
            vvmat(i,j)=a(i)*b(j)
        end do
    end do
end function vvmat

如果用allocate将vvmat()定义成分配数组,应该怎么定义呢?
1.png
回复

使用道具 举报

19

帖子

7

主题

0

精华

入门

F 币
107 元
贡献
62 点
 楼主| 发表于 2021-8-11 14:54:33 | 显示全部楼层
我把外部函数定义改为:
[Fortran] 纯文本查看 复制代码
real,external::vvmat

出现了这样的错误:
错误        1         error #8099: The rank of the function reference does not match the rank of the function definition.   [VVMAT]

626

帖子

1

主题

0

精华

大宗师

F 币
3117 元
贡献
1951 点
发表于 2021-8-11 17:33:58 | 显示全部楼层
函数返回值为数组,需要interface. 看《interface功能详解》http://fcode.cn/guide-61-1.html

177

帖子

2

主题

0

精华

宗师

F 币
1375 元
贡献
725 点

规矩勋章

发表于 2021-8-12 08:12:20 | 显示全部楼层
用参数传递返回值吧,比较简单

19

帖子

7

主题

0

精华

入门

F 币
107 元
贡献
62 点
 楼主| 发表于 2021-8-13 09:40:26 | 显示全部楼层
li913 发表于 2021-8-11 17:33
函数返回值为数组,需要interface. 看《interface功能详解》http://fcode.cn/guide-61-1.html ...

感谢感谢!!!

19

帖子

7

主题

0

精华

入门

F 币
107 元
贡献
62 点
 楼主| 发表于 2021-8-13 09:43:09 | 显示全部楼层
necrohan 发表于 2021-8-12 08:12
用参数传递返回值吧,比较简单

好的,我试一试,谢谢!!!!
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

QQ|捐赠本站|Archiver|关于我们 About Us|群聊|Fcode

GMT+8, 2021-9-24 08:49

Powered by Discuz! X3.2

© 2001-2017 Comsenz Inc.

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