Fortran - 在主程序中声明递归函数
Fortran - Declaring Recursive function in main program
我们是否应该在主程序中声明函数名称和类型?
例如,如果我有一个名为 header 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
为什么会这样?我们总是应该这样做吗?
您应该将过程放在模块中,use
模块。你比所谓的 explicit interface
过程和使用模块的代码知道过程的描述。
Correct use of modules, subroutines and functions in fortran
当你的函数不在模块中时,你确实必须按照你所展示的去做,即声明
integer :: sum
这样代码就知道 sum()
return 是一个整数。但是它不知道该函数接受什么样的参数。编译器无法检查您在调用 sum()
.
时是否使用了正确的参数数量和类型
当它在模块中时,编译器可以检查参数,您不必再次声明 return 类型。
我们是否应该在主程序中声明函数名称和类型?
例如,如果我有一个名为 header 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
为什么会这样?我们总是应该这样做吗?
您应该将过程放在模块中,use
模块。你比所谓的 explicit interface
过程和使用模块的代码知道过程的描述。
Correct use of modules, subroutines and functions in fortran
当你的函数不在模块中时,你确实必须按照你所展示的去做,即声明
integer :: sum
这样代码就知道 sum()
return 是一个整数。但是它不知道该函数接受什么样的参数。编译器无法检查您在调用 sum()
.
当它在模块中时,编译器可以检查参数,您不必再次声明 return 类型。