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

F90定义全局变量有两个方法:1,单独的common语句(虽然很老,一般不用了,但还是可以用,在变量少的情况下)。2,module模块。我先分用两种方法举例说明我的问题:... F90定义全局变量有两个方法:1,单独的common语句(虽然很老,一般不用了,但还是可以用,在变量少的情况下)。2,module模块。
我先分用两种方法举例说明我的问题:
1. 有一个常数A和一个二维数组B(10,10)定义为全局变量,
写为:real::A,B(10,10)
Common::A,B(10,10)
会出现错误Error: The dimensions of this array have been defined more than once. B
如写为:real::A
Common::A,B(10,10)
会出现错误:Error: This name does not have a type, and must have an explicit type. B

我看了些书,都讲得不是很清楚,哪些要作为全局变量来定义(是其他子程序要用,要共享的数据吗),对常数,一维数组,二维数组等定义有什么要求,才会避免以上错误。
2,主要我是新手看的都是些老程序,module实在不会用,虽然都说简洁,和common单独用有什么区别 ,望高手指点,谢谢
展开
 我来答
yangyibo27
2017-08-05
知道答主
回答量:3
采纳率:0%
帮助的人:3378
展开全部
题主好,现在是20170805的凌晨,搜索到这个题目,想补充一下,完善这个问题。
其实对于你标号1举出的两种弹出错误,我在中科大的fortran教材上看到一句话,很简短但是能够非常扼要的指出错误点。

这句话是:当COMMON语句指定了数组的秩和大小后,只能定义数组的类型而不能再次重复给定维界。
所以对于你的错误1,是触犯了再commony已经声明了数组的秩和大小后,变量类型定义中又再次声明大小的错误。而错误2则是因为B数组只声明了公共区、秩、大小,但是没有声明类型。这就是报错的原因。
然后是大的问题2,关于common和module的用法区别。
common是开辟公共内存,实现不同过程中的不同变量访问同一个内存位置。
module可以实现的是直接定义了全局变量,在不同函数中使用同一个变量名访问同一个内存位置。
如果想用Module实现common的功能,则可以使用Module中的变量改名功能。
题主应该都明白了,主要希望能为后来人做点贡献。
百度网友dd81632
推荐于2016-06-30 · 超过14用户采纳过TA的回答
知道答主
回答量:35
采纳率:0%
帮助的人:28.3万
展开全部
不要使用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
就像上面这个例子这样用就可以的
更多追问追答
追问
请问一下,只在一个子程序里用的变量不是全局变量,那它在哪里声明了,可以在MODULE里声明吗
多个子程序共用的是全局变量,在MODULE里声明,COMMON和SAVE都能实现全局变量的功能,
real::A,B(10,10)
Common A,B
common A,B(10,10)
real A,B
上面两个哪个对啊 谢谢
追答
在一个子程序里用的变量不是全局变量
是可以在module里面定义的
real::A,B(10,10)
Common A,B
这样使用就可以了
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友f7dbbe1
2011-11-29
知道答主
回答量:26
采纳率:0%
帮助的人:23.9万
展开全部
可以尝试这样:
common A,B(10,10)
real A,B

我不知道这里你明白不明白::的作用,它是用在赋初值或同时声明各种属性时用的,这里没有这些,可以不用它
追问
你的跟1楼不一样都不知道看谁的了
谢谢
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
sjzwuww
推荐于2017-08-07 · TA获得超过1.2万个赞
知道大有可为答主
回答量:6839
采纳率:82%
帮助的人:2106万
展开全部
real::A,B(10,10)
Common A,B
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式