如何在Fortran中创建函数?

时间:2017-08-29 06:44:44

标签: fortran gfortran

我确定解决这个问题的方法非常基础,但我很难弄清楚如何在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块之上。这些都没有奏效。使用当前程序,我在第6行(带有PRINT语句的行)上收到错误:

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

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

2 个答案:

答案 0 :(得分:2)

简单地将函数放入文件中将不会使主程序可以访问它。

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

Modern Fortran在“模块”中组织代码和数据。但是,为了您的目的,在主程序范围内“包含”函数更简单,如下所示:

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

答案 1 :(得分:0)

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

 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 作为结果。