fortran调用 带有参数 且 返回类型为数组的函数 及 相关歧义分析
Posted 新来的大狮
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了fortran调用 带有参数 且 返回类型为数组的函数 及 相关歧义分析相关的知识,希望对你有一定的参考价值。
fortran调用 带有参数 且 返回类型为数组的函数 及 相关歧义分析
1 参考书籍
Fortran95程序设计【彭国伦】 - P189 函数的使用接口
2 fortran环境
Visual Studio 2019(community) + XE2020
3 主要思路
① 定义好待调用的函数(function)
② 编写测试主程序调用该函数
③ 注意 在主程序中使用 被调用的函数 进行声明时, 需要使用interface关键字声明该调用函数
④ 验证结果
4 具体实现代码
4.1 项目结构
项目类型 - Empty Project
(一个fortran控制台程序,示例为FortranEx3项目)
文件结构 - 涉及两个文件
① 主程序文件 main.f90
② 函数外部文件 Source2.f90
4.2 主程序文件(入口文件)
main.f90
program test3
implicit none
!测试调用带有参数的返回类型为数组的函数,需要使用interface关键字
interface
function array_test(num)
double precision,dimension(10) :: array_test
double precision :: num
end function
end interface
double precision value
value = 9.6
print * , array_test(value)
end program
4.3 外部定义的函数文件
Source2.f90
!传入一个实数并对整个数组赋值后返回
function array_test(num)
double precision,dimension(10) :: array_test
double precision :: num
integer count
do count=1,10
array_test(count) = num
end do
return
end function
4.4 测试结果
成功调用 带有参数的 且 返回值为 数组的 函数 array_test
5 相关歧义分析
5.1 分析
若在测试程序中(main.f90) 在函数声明时, 不使用 interface 关键字进行相关声明,会导致未调用该函数。
即: 调用函数的代码 会变成 对该函数返回的数组的 某个具体元素的简单调用。
原因:
在fortran90语法中,对数组元素的调用为 使用数组名加小括号,如:array_test(1),调用array_test数组的第一个元素。
在Source2.f90程序中,由于此时 函数名array_test被声明为一个数组类型,该函数名在fortran90语法中 既可做 被调用的函数名,又可作返回的数组名
array_test(value)
此段 调用函数的代码,在fortran中
① 既可以指 传入value做参数 并调用该函数, 此时作 函数名 用
② 又可以指调用该数组的第value个索引的元素, 此时作 数组名 用
5.2 错误演示代码
main.f90
program test3
implicit none
!测试调用带有参数的返回类型为数组的函数,需要使用interface关键字
!interface
! function array_test(num)
! double precision,dimension(10) :: array_test
! double precision :: num
! end function
!end interface
!为方便观察结果而赋予的初值
double precision,dimension(10) :: array_test = (/0, 1, 2, 3, 4, 5, 6, 7, 8, 9/)
double precision value
value = 9.6
print * , array_test(9)
print * , array_test(value)
end program
Source2.f90 代码保持不变
5.3 错误执行结果
由于array_test被当做 数组名使用,此时value=9.6,
array_test(value)变成简单的调用array_test数组第9个索引的值
而实际的array_test(value)未被当做函数使用
即:未发生为数组每个元素赋值为9.6的过程,最终输出类似 array_test[9] 的效果,返回元素值8。
注:fortran数组下标从1开始。
以上是关于fortran调用 带有参数 且 返回类型为数组的函数 及 相关歧义分析的主要内容,如果未能解决你的问题,请参考以下文章