函数(一) from《FORTRAN95 程序设计》
1、子例程subroutine的使用
格式 subroutine sub1()......
retrun
end subroutine sub1()
注意: 最后一个命令通常为return,表示返回到主程序调用它的位置,子例程可以在FORTRAN90中实现自我调用,在FORTRAN77中则不被允许;另外子例程拥有独立的变量和独立的“行代码”。在传递参数的时候应用的是“地址调用”,即主程序所传出的参数和子例程接受的参数,他们使用相同的地址来记录数据,正因为使用相同的内存地址,可以视为同一个变量。这与有些编程语言有着明显不同,例如C语言使用的“传值调用”,即子程序中改变参数的内容不影响调用处的变量,因此这一点值得注意。
2、自定义函数function
自定义函数的使用是为了弥补系统库里没有函数这一缺点,他的使用与子例程不同:
首先在使用前必须声明这个自定义的函数,自定义的函数执行后返回一个数值。因此,自定义函数没有改变接受参数的数值,而只是读取参数,但子例程却可以改变传递参数的数值,因此这个不同之处可以让用户在子例程和自定义函数间做出选择。
program ex5123implicit nonereal :: a=1real :: b=2real,external ::add ! 声明add是个函数,不是变量;external是可以省略的,但最好不要省略write(*,*) add(a,b)stop
end
function add(a,b)implicit nonereal::a,breal::add !此处用来说明这个函数的返回值类型,不是声明变量;当然可以放到函数开头
add=a+b ! real function add(a,b)return
end3、全局变量common
COMMOM是FORTRAN77的使用全局变量的用法,用它定义一块共享的内存空间,“全局”的意思是无论在主程序中还是在子例程中,只要被定义的COMMON变量可以被任意的程序部分代码调用。因此注意全局变量是被所有代码取用的,因此它至于声明时的相对位置有关,和变量的名称无关,因此不同的变量名称可能用的同一内存位置,因此在程序设计时尽量不要用COMMON设置全局变量,很容易造成混淆,带给我们麻烦。当全局变量很多的时候一般用分区的方式区分,例如下面的例子:
另外需要共享大量的数据,而且有大量程序都会用到这些共享数据的时候才用全局变量。
integer::a,b
common /group1/ a !变量a放到group1这个区间
common /group2/ b !变量b放到group2这个区间
a=1
b=2
另外,common变量在设置初值时 要用BLOCK DATA程序模块,即设置初值部分在
block data !在主程序之前生效,功能只在于设置全局变量的初值implicit noneinteger a,bcommon a,bdata a,b /1,2/integer c,dcommon /group1/ c,ddata c,d /3,4/............
end block data
使用COMMON变量应该注意:COMMON提供共享的内存,但是编译器不会负责做类型检查;
另外,由于不负责数据类型检查,当在维护程序时,修改COMMON变量的类型,使得程序中要修改的部分变得很多。因此FORTRAN90会用另外的方式使用全局变量来避免上述问题。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
