Fortran中subroutine和function的区别
Fortran中subroutine和function的区别
(2014-09-11 17:20:04)二者均是被program调用,完成一定的任务,但是二者有明显的不同:
1. subroutine不需要在program中声明,但是在调用时必须用Call命令;与此相反,function必须在program中声明,在调用时不用任何命令,因为函数名本身就是命令;
2. subroutine可以不返回什么结果,但是function必须返回计算结果。
附:
function声明格式, real, external :: function_name !声明function_name 是个函数,返回结果是real类型。
在函数定义中也必须指定function_name的数据类型,比如:
function_name(a1, a2, a3, ....)
......
real :: function_name
.....
end
3. 使用function有一个“不成文的规定”,就是:“传递给函数的参数,只要读取它的数值就好了,不要去改变它的数据”。虽然在语法上可以改变输入它的数据,但是输入函数的参数就是所谓的“自变量”,而函数返回的值是“应变量”。“自变量”是自由变化的,它的值应该不会在使用函数的过程中被改变。如果想要改变输入的参数时,最好使用子程序,而不是使用函数来完成这个工作。
DOUBLE PRECISION FUNCTION D1MACH(I) C C DOUBLE-PRECISION MACHINE CONSTANTS C C D1MACH( 1) = B**(EMIN-1), THE SMALLEST POSITIVE MAGNITUDE. C C D1MACH( 2) = B**EMAX*(1 - B**(-T)), THE LARGEST MAGNITUDE. C C D1MACH( 3) = B**(-T), THE SMALLEST RELATIVE SPACING. C C D1MACH( 4) = B**(1-T), THE LARGEST RELATIVE SPACING. C C D1MACH( 5) = LOG10(B)
和
SUBROUTINE FDUMP
C***BEGIN PROLOGUE FDUMP
C***PURPOSE Symbolic dump (should be locally written).
C***LIBRARY SLATEC (XERMSG)
C***CATEGORY R3
C***TYPE ALL (FDUMP-A)
C***KEYWORDS ERROR, XERMSG
C***AUTHOR Jones, R. E., (SNLA)
C***DESCRIPTION