关于fortran全局变量设在module里面,还用common语句声明么?
1个回答
展开全部
common 不是全局变量。国内有的教科书这么叫,是不对的。
common 应该叫未命名的common数据块。同时,还有已命名的common块。
全局变量的叫法,如果跟国外的学者或程序员交流,会出现障碍的。
common 是一种早期的数据共享方式,由于其严重的不以变量名对应,而已顺序对应等原因,导致很多莫名其妙的错误发生。因此,我强烈建议你放弃使用它。
module 是更好的解决方案。同一个 module 中的变量,只要不是private属性的,都可以被所有 use 了该 module 的程序单元使用。且共用一个内存地址。
module 具有比 common 更好的共享方式。不容易出错,按照人们习惯的变量名对应。
因此,如果你学习使用 module 了,请不要在其中夹杂进古老的 common 用法。
对于 common 用法,我建议的态度是:看到了,能理解能认识。自己坚决不用。
common 应该叫未命名的common数据块。同时,还有已命名的common块。
全局变量的叫法,如果跟国外的学者或程序员交流,会出现障碍的。
common 是一种早期的数据共享方式,由于其严重的不以变量名对应,而已顺序对应等原因,导致很多莫名其妙的错误发生。因此,我强烈建议你放弃使用它。
module 是更好的解决方案。同一个 module 中的变量,只要不是private属性的,都可以被所有 use 了该 module 的程序单元使用。且共用一个内存地址。
module 具有比 common 更好的共享方式。不容易出错,按照人们习惯的变量名对应。
因此,如果你学习使用 module 了,请不要在其中夹杂进古老的 common 用法。
对于 common 用法,我建议的态度是:看到了,能理解能认识。自己坚决不用。
追问
但是这样能做到数据共享么,比如我在一个子程序(不是module contains里的子程序)
里调用module,为一个变量a赋值 a=10。此时这个变量就是个局部变量。我在另一个子程序再次调用时module,a还等于10么?
追答
共用一个内存地址。意思就是可以。
下面的事情,你不必知道,但知道了,对你或许有帮助:
其实,对编译器而言。module A 里面的变量 B,不叫 B,而叫 A::B。
每一个 use 了 A 的程序,其内部使用 B,编译器都视为 A::B。
比如 函数 c ,d,e,f 里都 use 了 A,他们里的 B,都是 A::B。
所以,每一个 A::B 都是一样的,编译器视为完全相同。
(不同的编译器可能不同,有的内部叫 A::B,有的内部叫 Mod_A_B 这样。但不管怎样,这个内部名称,程序员一般看不到,也不关心)
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询