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 

 

 

posted @ 2020-09-14 16:10  千家诗  阅读(954)  评论(0编辑  收藏  举报