我确定解决这个问题的方法非常基础,但我很难弄清楚如何在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
从我尝试的所有指南中,我似乎做得对;至少有一个变体,或者其中一些变体的组合应该有效。如何更改此代码以使用该功能?
答案 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
作为结果。