【问题标题】:Correct fortran function syntax正确的 fortran 函数语法
【发布时间】:2016-05-17 00:31:38
【问题描述】:

我对 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 类型的变量,编译器如何知道返回哪个变量?

【问题讨论】:

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

标签: function fortran


【解决方案1】:

根据具体情况,您的所有示例都是合适的。这方面可以归结为样式偏好。

如果开始函数语句没有 RESULT 说明符,则在函数体内,函数结果与函数同名。

您可以在开始的函数语句中使用 RESULT 说明符,就像在您的第一个示例中一样,将函数结果的名称更改为其他名称。

您可能希望这样做,因为您更喜欢使用函数结果的名称而不是函数名称。如果您确实想递归调用该函数,您可能需要这样做。

您可以在开始语句中指定函数的类型(根据您的第二个或第三个示例),也可以在函数本身的规范部分(在主体中)指定函数的类型(其中大概是在您的第一个示例中发生的事情,隐式键入除外)。函数结果的属性必须在函数体中指定,因此作为风格问题,有些人更喜欢将所有内容放在函数体中(这也避免了与范围和定义顺序相关的一些模糊复杂性)。你永远不应该使用隐式类型。

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

Repeating - 函数result的名字就是函数名,如果开始函数语句中没有RESULT子句,否则就是result子句中的名字。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-02
    • 2018-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多