如何在 Fortran 中创建函数?

How to create functions in Fortran?

我确信这个问题的解决方案非常基础,但我很难弄清楚如何在 Fortran 中使用函数。我有以下简单程序:

  PROGRAM main
    IMPLICIT NONE
    INTEGER :: a,b
    a = 3
    b = 5
    PRINT *,funct(a,b)
  END PROGRAM

  FUNCTION funct(a,b)
    IMPLICIT NONE
    INTEGER :: funct
    INTEGER :: a,b

    funct = a + b
  END FUNCTION

我已经尝试了几种变体,包括在 FUNCTION 之前分配数据类型,将 funct 的结果分配给主程序中的另一个变量并打印该变量,以及将 FUNCTION 块移动到 PROGRAM 块上方。 None 其中有效。使用当前程序,我在第 6 行(带有 PRINT 语句的行)出现错误:

Error: Return type mismatch of function 'funct' (UNKNOWN/INTEGER(4))
Error: Function 'funct' has no IMPLICIT type

从我尝试过的所有指南来看,我似乎做得对;至少其中一种变体或其中一些变体的组合应该有效。我需要如何更改此代码才能使用该功能?

简单地将函数放在文件中不会使其可供主程序访问。

传统上,您可以简单地将一个函数声明为 external,编译器只希望在编译时找到合适的声明。

现代 Fortran 在 "modules" 中组织代码和数据。但是,为了您的目的,"contain" 主程序范围内的函数更简单,如下所示:

PROGRAM main
  IMPLICIT NONE
  INTEGER :: a,b
  a = 3
  b = 5
  PRINT *,funct(a,b)

CONTAINS

  FUNCTION funct(a,b)
    IMPLICIT NONE
    INTEGER :: funct
    INTEGER :: a,b

    funct = a + b
  END FUNCTION funct
END PROGRAM main

更简单的解决方案可以是下面的代码

 PROGRAM main
    IMPLICIT NONE
    INTEGER :: a,b, funct
    a = 3
    b = 5
    PRINT *,funct(a,b)
  END PROGRAM

  FUNCTION funct(a,b)
    IMPLICIT NONE
    INTEGER :: funct
    INTEGER :: a,b

    funct = a + b
  END FUNCTION

唯一的区别在于第三行,我在其中将 funct 声明为 integer。它编译并打印 8 作为结果。