Fortran Coder

查看: 1875|回复: 2
打印 上一主题 下一主题

[子程序] 传参过程中的类型转换

[复制链接]

43

帖子

13

主题

0

精华

专家

F 币
436 元
贡献
155 点
跳转到指定楼层
楼主
发表于 2023-8-1 22:50:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我想写一个函数,共有三个参数:
[Fortran] 纯文本查看 复制代码
function func(a, b, c) result(output)
real(8), intent(in):: a, b, c
real(8), intent(inout):: output
...
end function func

如今我传了三个整数给a、b、c,程序报错:Type mismatch in argument passed INTEGER(4) to REAL(8)
实例如下:
[Fortran] 纯文本查看 复制代码
program main
    implicit none
    real, allocatable:: array(:)

    array = linspace(0.,1.,11)
    print '(*(f3.1,/))', array

    contains
        function linspace(arg1, arg2, N) result(output)
            implicit none
            real:: arg1, arg2
            integer:: N
            real(8),dimension(N):: output

            integer:: i

            output(1) = arg1
            if (N>1) then
                do i = 2, N
                    output(i) = arg1 + (i-1)*(arg2-arg1)/(N-1)
                end do
            end if
        end function
end

我看了我们网站的教程:为什么要在数学函数前面加D,加C加Q?如dsin - Fortran教程 - Fortran Coder 程序员聚集地 (fcode.cn)
了解到 Generic Procedure 可以实现统一接口的功能。

但如果 a、b、c 为单精度呢?为2字节的整型呢?...参数类型组合有十几种都不止。
难道要为每一中组合都写一个函数吗?

除了 Generic Procedure,有没有其它处理办法?比如在传递参数时进行类型转换

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

736

帖子

4

主题

0

精华

大师

农村外出务工人员

F 币
700 元
贡献
359 点

新人勋章爱心勋章水王勋章元老勋章热心勋章

沙发
发表于 2023-8-2 08:52:20 | 只看该作者
d = func(real(a,8), real(b,8), real(c,8))

43

帖子

13

主题

0

精华

专家

F 币
436 元
贡献
155 点
板凳
 楼主| 发表于 2023-8-2 09:04:02 | 只看该作者
谢谢楚留香
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2024-12-23 18:00

Powered by Tencent X3.4

© 2013-2024 Tencent

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