允许使用rank-1数组和标量的Fortran接口。

问题描述 投票:0回答:1

背景:GCC 10 取消了对调用具有不同类型参数的子程序的支持。GCC 10删除了对调用不同类型参数的子程序的支持。我的目的是要写一个既能尊重 integer, dimension(:)integer.

(这意味着我不能使用其他选项,比如将标量嵌入一个数组中。我必须改变接口)

根据 GCC文件:

可以提供符合标准的代码,通过使用一个明确的接口,允许不同类型的参数。TYPE(*).

:

不过,请注意, TYPE(*) 仅接受标量参数,除非 DIMENSION 是明确指定的。由于 DIMENSION(*) 只支持数组(包括数组元素)而不支持标量,它不能完全替代 C_LOC. 另一方面: 假定类型假定等级虚参数(TYPE(*), DIMENSION(..))允许标量和数组。但需要在callee端用特殊代码来处理数组描述符。

在下面的接口中,我有 type(*), dimension(:) :: data. 如何根据我上面强调的文字进行修改?

module z
    interface
        subroutine a(data)
            type(*), dimension(:) :: data
        end subroutine a
    end interface
contains
    subroutine b(data)
        integer :: data
        call a(data)
    end subroutine
    subroutine c(data)
        integer, dimension(:) :: data
        call a(data)
    end subroutine
end module

神保操场

arrays function interface fortran prototype
1个回答
1
投票

我不知道GCC 10删除了什么(你的来源是什么?),但正是由于你提到的原因,GCC还引入了指令

!GCC$ attributes no_arg_check::A 

(见 在Fortran中,任何类型的数组的过程 )

已经在其他编译器中使用,它使程序能够被任意参数、标量或任意级别的数组调用,主要用于接受任意类型缓冲区的例程,特别是在MPI库中。

新的 DIMENSION(..) 并不适合在Fortran中使用,它需要特殊的代码来理解标准的Fortran数组描述符,而且主要是希望用C语言编写。https:/gcc.gnu.orgonlinedocsgfortranFurther-Interoperability-of-Fortran-with-C.html#Further-Interoperability-of-Fortran-with-C。 gfortran不 但又支持标准数组描述符。

© www.soinside.com 2019 - 2024. All rights reserved.