Fortran - 在主程序中声明递归函数

时间:2015-03-29 00:13:32

标签: fortran

我们是否应该在主程序中声明函数名称和类型?

例如,如果我有一个名为具有此标题recursive function sum(a,b) result(result)

的程序

当我尝试编译时,我会遇到一些错误。

Error: Return type mismatch of function 'sum' at (1) (UNKNOWN/INTEGER(4))

Error: Function 'sum' at (1) has no IMPLICIT type

我设法通过在主程序中声明函数来摆脱错误,例如:

integer :: sum

为什么会这样?我们一直都应该这样做吗?

1 个答案:

答案 0 :(得分:0)

您应该将程序放在模块和use模块中。你没有所谓的explicit interface程序,使用该模块的代码知道程序的描述。

Correct use of modules, subroutines and functions in fortran

当你的功能不在模块中时,你确实必须做你所显示的,即声明

integer :: sum

这样代码知道sum()返回一个整数。但是它不知道函数采用什么样的参数。在调用sum()时,编译器无法检查您是否使用了正确的参数数量和类型。

当它在模块中时,编译器可以检查参数,而不必再次声明返回类型。