EQUIVALENCE语句,COMMON语句和数据块子程序
出处:按学科分类—工业技术 企业管理出版社《工程师手册》第843页(2443字)
l.EQUIVALENCE语句(等价语句)
格式如下:
EQUIVALENCE(变量表1),(变量表2),…
其中变量表中允许是变量名,数组名或数组元素,它们之间用逗号隔开。
该语句使用同一变量表中的所有变量共同一个存储单元。例如:
EQUIVALENCE(X,Y),(A,B,C)
上述语句使变量x与y共用一个存储单元,变量A,B,C共用一个存储单元。
INTEGER L(3),M(5),N(4)
EQUIVALENCE(L,M(2),N(3))
上述语句中,变量表中有数组名和数组元素,它意味着L(1)与M(2)、N(3)共用存储单元,由于每个数组在内存中都占有一系列连续的存储单元,故最终占用内存的情况如图3.2.7-1。
图3.2.7-1 EQUIVALENCE语句存储单元使用示意图
2.COMMON语句(公用语句)
该语句的作用是利用公用区使不同程序单位的变量共享存储单元。FORTRAN程序中有两种公用区:无名公用区和有名公用区。
(1)无名公用区
一个程序中只能有一个无名公用区。开辟无名公用区的COMMON语句形式如下:
COMMON a1,a2,…
其中a1,a2…允许是普通变量名、数组名和数组说明符。例如:
在主程序中写:
COMMON A,B,M,R(4)
在子程序中写:
COMMON X,Y,N,S(4)
结果在无名公用区中变量A和X、B和Y、M和N分别共用一个存储单元,数组R和S共同占用4个存储单元。
建立和使用无名公用区的规则:
①在同一程序单位中可以出现几个COMMON语句,其作用相当于一个,编译程序按它们出现的先后次序把语句中的变量顺序放在无名公用区的存储单元中。
②各程序单位COMMON语句中的变量类型必须按位置一一对应。
③在一个程序单位中,同一名字只能在公用语句中出现一次。各程序单位中,无名公用区中的变量个数可以不一致。
(2)有名公用区
一个程序中可根据需要开辟任意多个有名公用区。利用COMMON语句说明有名公用区的形式如下:
COMMON /n1/a1,a2,…/n2/b1,b2,…
其中n1,n2为公用区名。a1,a2…和b1,b2…代表各公用区中的变量名,数组名和数组说明符。两个连续的斜杠(没有公用区名)表示无名公用区。例如:
在主程序中有COMMON/T1/A,X(8),N1,N2,/T2/I,J,C(4)
在子程序中有COMMON/T1/A1,X1(4),/T2/I1,J1,C(4)和COMMON/T1/Y(4),NA,NB
则最终各程序单位的变量在各公用区中分布的情况见图3.2.7-2。
图3.2.7-2 COMMON语句存储单元使用示意图
3.数据块子程序
形式如下:
BLOCK DATA子程序名
…
END
数据块子程序用来给有名公用区中的变量赋初值,它是一个独立的程序单位。
数据块子程序的说明规则如下:
①数据块子程序可以没有子程序名,称为无名数据块子程序。一个程序中只能有一个无名数据块子程序,可以有任意多个有名数据块子程序。
②数据块子程序仅用来给有名公用区的变量赋初值,不能被别的程序单位调用。
③在数据块子程序中不允许出现可执行语句。
④在有名公用区中指定的所有变量,必须全部按顺序列在数据块程序中的COMMON语句中。