2016-05-17 75 views
3

我对fortran函数的各种语法感到困惑。正确的fortran函数语法

function func(i) result(j) 
... 
end function fun 

这里是第二个例子

real function func (x) 
... 
end function func 

这是第三个例子

real function func (x) 
    ... 
    return 
    end function func 

哪一个适当的语法按照现代Fortran标准?在第二和第三个例子中,如果我在real类型的程序中声明多个变量,编译器如何知道要返回哪个变量?

+1

@HighPerformanceMark我同意 - 虽然相关,但这不是重复的(至少) – OMGtechy

回答

4

根据具体情况,所有示例都是合适的。这方面的问题归结为风格偏好。

如果打开函数语句没有RESULT说明符,则函数体内的函数结果与函数具有相同的名称。

您可以在打开的函数语句中使用RESULT说明符(如第一个示例中所述),以将函数结果的名称更改为其他名称。

您可能想要这样做,因为您更喜欢使用除函数名称之外的函数结果的名称。如果您真的想递归调用该函数,则可能需要执行此操作。

您可以在打开的语句中指定函数的类型(按照第二个或第三个示例),或者可以在函数本身的规范部分(正文)中指定函数的类型(这是你的第一个例子中可能发生的情况,隐式键入除外)。函数结果的属性必须在主体中指定,因此作为风格问题,有些人更愿意将所有内容都放在函数体中(这也避免了与范围和定义顺序相关的一些模糊复杂问题)。你不应该使用隐式输入。

您的最后一个示例只是在函数的可执行部分末尾有一个显式的return语句。这是多余的 - 当执行到达函数的可执行部分的末尾时,该函数自动返回。有些人更喜欢明确的return,也许是因为他们深深地担心编译器可能突然忘记自动返回,而另一些人则认为这是荒谬的愚蠢。

重复 - 如果在打开的函数语句中没有RESULT子句,则函数结果的名称是函数名称,否则它是结果子句中的名称。