如何在 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
作为结果。
我确信这个问题的解决方案非常基础,但我很难弄清楚如何在 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
作为结果。