Fortran Coder

查看: 14198|回复: 5
打印 上一主题 下一主题

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

[复制链接]

28

帖子

10

主题

0

精华

熟手

F 币
140 元
贡献
81 点
跳转到指定楼层
楼主
发表于 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 (47.89 KB, 下载次数: 245)

1.png
分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

28

帖子

10

主题

0

精华

熟手

F 币
140 元
贡献
81 点
沙发
 楼主| 发表于 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]

834

帖子

2

主题

0

精华

大宗师

F 币
3922 元
贡献
2332 点
板凳
发表于 2021-8-11 17:33:58 | 只看该作者
函数返回值为数组,需要interface. 看《interface功能详解》http://fcode.cn/guide-61-1.html

250

帖子

2

主题

0

精华

宗师

F 币
1731 元
贡献
872 点

规矩勋章

地板
发表于 2021-8-12 08:12:20 | 只看该作者
用参数传递返回值吧,比较简单

28

帖子

10

主题

0

精华

熟手

F 币
140 元
贡献
81 点
5#
 楼主| 发表于 2021-8-13 09:40:26 | 只看该作者
li913 发表于 2021-8-11 17:33
函数返回值为数组,需要interface. 看《interface功能详解》http://fcode.cn/guide-61-1.html ...

感谢感谢!!!

28

帖子

10

主题

0

精华

熟手

F 币
140 元
贡献
81 点
6#
 楼主| 发表于 2021-8-13 09:43:09 | 只看该作者
necrohan 发表于 2021-8-12 08:12
用参数传递返回值吧,比较简单

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

本版积分规则

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

GMT+8, 2024-11-1 08:04

Powered by Tencent X3.4

© 2013-2024 Tencent

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