gpt4 book ai didi

compiler-errors - 未报告 Fortran 77 中参数错误中的排名不匹配

转载 作者:行者123 更新时间:2023-12-02 10:42:03 27 4
gpt4 key购买 nike

我正在尝试将一段代码从 Fortran 77 移植到 Fortran 90,我有一个关于在 Fortran 77 中捕获参数不匹配的问题。

这是 Fortran 90 中的代码

program test 
use my_module
real ml_time
call gettimes(cdfid,ml_time,ml_ntimes)

在调用子例程中,这是定义传递变量的方式
module my_module 
use netcdf

subroutine gettimes(cdfid,times,ntimes)
real times(*)

call check(nf90_inq_dimid(cdfid,'time', timid))

call check(nf90_inquire_dimension(cdfid, timid, len = ntimes))

call check(nf90_inq_varid(cdfid,'time',timid))

call check(nf90_get_var(cdfid,timid,times(1:ntimes)))


end subroutine gettimes

在 Fortran 77(.f 文件)和 gfortran 5.4 中,为什么这不会产生编译错误?

当我将它移植到 Fortran 90 时,相同的代码会产生排名不匹配的编译错误。

这是 Fortran 90 中的错误
add2p.f90:191:22:

call gettimes(cdfid,ml_time,ml_ntimes)
1
Error: Rank mismatch in argument ‘times’ at (1) (rank-1 and scalar)

在 Fortran 77 中,这是代码的组织方式
program test 
real ml_time
call gettimes(cdfid,ml_time,ml_ntimes)

在另一个文件 xyz.f
  subroutine gettimes(cdfid,times,ntimes,ierr)

include "netcdf.inc"

integer ierr,i
real times(*)
integer didtim,ntimes

integer cdfid,idtime


do 10 i=1,ntimes
call ncvgt1(cdfid,idtime,i,times(i)) ! get times
10 continue




end

当然,我通过使它们具有相同的等级来消除错误,但我想知道为什么在 Fortran 77 中没有报告编译器错误。

最佳答案

您没有显示足够的代码来确定,但您可能在 Fortran 90 代码中使用了显式接口(interface)(例如,模块)。在这种情况下,编译器有义务检查这种不一致并且必须产生错误。使用隐式接口(interface)时情况并非如此(它们在 Fortran 77 中不是显式接口(interface))。

仅当标量是数组元素时,才允许将标量传递给假定大小的数组(请参阅序列关联)。

我在 gfortran 4.8 中确实收到了警告,但如果调用位于不同的源文件中,则可能不会发生这种情况:

  subroutine s1(a)
integer :: a(*)
end

subroutine s2()
call s1(1)
end subroutine

> gfortran rank.f90 -c
rank.f90:7.12:

call s1(1)
1
Warning: Rank mismatch in argument 'a' at (1) (rank-1 and scalar)

请注意,编译器默认将每个源代码编译为 Fortran 2008 + 扩展。它不以任何方式区分 Fortran 90 和 77。

值得注意的是,.f 和 .f90 并不意味着 Fortran 77 和 Fortran 90,它们意味着固定格式和自由格式源。这两种源格式都是有效的 Fortran 90 - Fortran 2008。

关于compiler-errors - 未报告 Fortran 77 中参数错误中的排名不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45164502/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com