问一个FORTRAN关于全局变量的问题(可以追分哦)

2024-12-27 22:34:55
推荐回答(4个)
回答1:

题主好,现在是20170805的凌晨,搜索到这个题目,想补充一下,完善这个问题。
其实对于你标号1举出的两种弹出错误,我在中科大的fortran教材上看到一句话,很简短但是能够非常扼要的指出错误点。

这句话是:当COMMON语句指定了数组的秩和大小后,只能定义数组的类型而不能再次重复给定维界。
所以对于你的错误1,是触犯了再commony已经声明了数组的秩和大小后,变量类型定义中又再次声明大小的错误。而错误2则是因为B数组只声明了公共区、秩、大小,但是没有声明类型。这就是报错的原因。
然后是大的问题2,关于common和module的用法区别。
common是开辟公共内存,实现不同过程中的不同变量访问同一个内存位置。
module可以实现的是直接定义了全局变量,在不同函数中使用同一个变量名访问同一个内存位置。
如果想用Module实现common的功能,则可以使用Module中的变量改名功能。
题主应该都明白了,主要希望能为后来人做点贡献。

回答2:

不要使用common
直接用module
在module里面定义变量
然后在程序里引用,作为全局变量使用
例如:
moduLe constantDATA
REAL,PARAMETER :: Pi = 3.14159265359, vC = 3.e8
compLex,PARAMETER :: cj = (0.0, 1.0)
REAL vf, vk, vw, vwaveLength, eta
compLex, SAVE :: cjvk
endmoduLe

program test
use constantDATA
print*,Pi
end
就像上面这个例子这样用就可以的

回答3:

可以尝试这样:
common A,B(10,10)
real A,B

我不知道这里你明白不明白::的作用,它是用在赋初值或同时声明各种属性时用的,这里没有这些,可以不用它

回答4:

real::A,B(10,10)
Common A,B