在`function`语句中定义结果数据类型

Alf*_*ago 5 fortran function variable-declaration fortran90 intel-fortran

好吧,我先说一下我为什么要这样做.我经常用C/C++编写代码,所以对我来说定义函数非常自然:

vector<int> TestFunct (int a, int b){
<some code here>

return <result>;}
Run Code Online (Sandbox Code Playgroud)

现在我正在学习Fortran,所以我声明这样的函数:

function TestFunc(a,b)
        integer, dimension(:)    :: TestFunc
        integer                  :: a
        integer                  :: b
        <some code here>
endfunction TestFunc
Run Code Online (Sandbox Code Playgroud)

但我最近了解到结果的数据类型可以在函数语句中定义,例如:<data_type> function TestFunc(a,b),这对我来说更自然,因为我习惯了类似的C++声明.

问题是,当我'尝试定义一个向量(实际上是一个integer, dimension(:)严格说话)作为结果数据类型时,我有ifort错误#5082(我将在下一行详述).

在一个例子中,对于代码:

real, dimension(:) function TestFunc(a,b)
         integer, intent(in)    :: a
         integer, intent(in)    :: b

         <more code here>

endfunction Testfunc
Run Code Online (Sandbox Code Playgroud)

我得到输出:

main.f90(23): error #5082: Syntax error, found ',' when expecting one of: ( * ) ( :: %FILL , TYPE INTEGER REAL COMPLEX BYTE CHARACTER CLASS DOUBLE ...
real, dimension(:) function TestFunc(a, b)
----^
main.f90(23): error #5082: Syntax error, found IDENTIFIER 'FUNCTION' when expecting one of: * :: , <END-OF-STATEMENT> ; [ / = => WITH
real, dimension(:,:) function TestFunc(a, b)
---------------------^
Run Code Online (Sandbox Code Playgroud)

希望我已经清楚地解释了我的问题.

编辑:那么,为了总结我刚才在一个问题中所说的内容:我如何integer, dimension(:)在函数语句中声明一个向量(即:)作为返回数据类型?

Vla*_*r F 7

您可以在function符号前定义返回类型,但它是有限的.这是一种较旧的方式,仅适用于较简单的情况.规则有点模糊,我不记得它们,但这是标准所说的:

函数子程序定义的函数结果的类型和类型参数(如果有)可以由FUNCTION语句中的类型规范或出现在规范部分中的类型声明语句中的结果变量的名称来指定.功能子程序.它们不应双向指定.如果它们没有被指定,则它们由函数子程序中的隐式类型规则决定.如果函数结果是数组,可分配或指针,则应通过函数体中结果变量名称的规范来指定. 函数结果属性的规范,伪参数属性的规范以及过程标题中的信息共同定义了函数的特征(12.3.1).