1、common

虽然准确来说Fortran中没有所谓的全局变量,但common开辟公用区就是在定义全局变量!也就是我们无论在子程序还是主程序中给变量赋值了,那该变量就一直是这个值。而且注意,common开辟公用区时只要位置对应,无论定义的变量名是否一样,对应位置的参数就永远保持这个值。

For example:

Situation1:

program fcode
!  Implicit None
  common /group1/ inf , e
  call SubOK()
  write(*,*) inf , e   !// 输出1,2.040000
End Program fcode
 
Subroutine SubOK()
!  Implicit None
  common /group1/ inff, xgasdf
  inff = 1.04 
  xgasdf = 2.04
End Subroutine SubOK

Situation2:

program fcode
!  Implicit None
  common /group1/ inff, xgasdf
  inff = 1.04 
  xgasdf = 2.04
  call SubOK()
End Program fcode
 
Subroutine SubOK()
!  Implicit None
  common /group1/ inf , e
  write(*,*) inf , e !// 输出1,2.040000
End Subroutine SubOK

以上这两种情况完全是等价的。不过为了避免混淆,一般公共区,同一个变量用同一个名字比较好。因此,必须保证对应变量的顺序、精度、大小、长度等完全一致。稍有差别就会出现对应“错位”。

PS:1、代码中的 /group1/ 就是给各个子程序中的公共变量分区,个人感觉就是使代码更工整一些,也没啥大作用。

2、这里没有采用Implicit None,所以common开辟了公共区之后我们可以不用定义变量类型,这里默认IN规则,即 “在程序中,凡是变量名以字母i、j、k、l、m、n(或I、J、K、L、M、N)开头的变量被默认为整型变量,以其他字母开头的变量被默认为实型变量。” 否则common 公共区的变量,需要在每一个使用它的函数内重新定义!!!

For example:

program fcode
  Implicit None
  common a , b 
  Integer :: a = 1 , b = 2 !// common 并不说明类型,需单独定义类型
  call SubOK()
End Program fcode
 
Subroutine SubOK()
  Implicit None
  common a , b
  Integer :: a , b
  write(*,*) a , b !// 输出1,2,正确
End Subroutine SubOK

2、Include

当我们需要定义很多变量,或者声明很多常数(PS:利用parameter(MAXP=8000),常量MAXP将一直是8000),可以将这些变量、常量单独写成一个文件,然后用include 插入。可以简单理解为:打开你要include的 文件,全选,复制。粘贴在 include 语句处。

For example:

include 'kennet.inc',若kennet.inc不在同一目录下,也可以直接用绝对路径

3、Module

Moudle概念,不仅克服了COMMON的缺陷,可以完全替代COMMON,还进行了功能扩展。而且,Module中也可以定义COMMON。强烈建议放弃使用COMMON,用Module代替。

一个 Module 是一个代码单元,与主程序,外部子(例行)程序或函数是差不多的“等级”。但它的功能更强大,也更便捷。

在 Module 中,我们可以定义若干变量(含数组、type、可分配数组等) 。这些变量会存储在一个特定的空间内,而被所有 use 了该模块的程序单元直接使用。而且这种使用,是按照变量的名称而对应的,而非变量的内存字节顺序。

同时,use 了该模块的程序单元,也继承了这些变量的类型、精度、大小、长度等属性,而不必(也不能)重新定义

Module modname
  Implicit None
  !// 明确变量类型,顺序无关
  Integer , save :: a = 1 , b = 2 
End Module modname
 
program www_fcode_cn
  use modname !// 无需,也不能再定义 a b
  Implicit None
  write(*,*) b , a !// 输出 2,1 正确
  a = 3
  b = 4
  !// 按变量名对应,因此倒序输出,其值也倒序
  call Sub()
End Program www_fcode_cn
 
Subroutine Sub()
  use modname !// 无需,也不能再定义 a b
  Implicit None
  write(*,*) a , b !// 输出 3,4 正确
End Subroutine Sub

在这段代码中,我们书写了一个 Module,名叫 modname。其中包含两个变量 a b,并含有初值 1 和 2

save 属性表明这些变量会被保存起来,以便在不同的程序单元间保持同样的值。
(虽然语法未明确指出,但所有的编译器都默许 Module 中的变量具有 save 属性,因此,很多时候 save 也可以忽略不写)

在主程序里,我们的 a b 输出顺序颠倒了。但可以看到,输出的结果是符合我们预期的。

Fortran 中的common,include和module相关推荐

  1. Fortran中function,subroutine, interface和module的简单使用

    代码运行在simply fortran2下,复制,粘贴可直接运行看效果 !!!!!------------------- ! Fortran中函数分两类:子程序(subroutine)和自定义函数(f ...

  2. fortran语言和python_如何在Fortran中调用Python

    Python是机器学习领域不断增长的通用语言.拥有一些非常棒的工具包,比如scikit-learn,tensorflow和pytorch.气候模式通常是使用Fortran实现的.那么我们应该将基于Py ...

  3. fortran中类型

    - 由于 GNU 的 Fortran 和 C 语言二者的函数彼此可以直接相互调用,所以混合编程可以非常容易地实现.只要你足够仔细,确保函数调用时传递的参数类型正确,函数就可以在两种语言间来回调用,就像 ...

  4. 演练VC中的COMMON一族(转贴)之一 1

    声明:由于在CSDN论坛看到不少VC新手问及VC控件的使用.本人手头正好有一份以前下载到的一份资料,讲述的比较详细.所以发出来和大家共享.但由于时间久远,已不及得下载的地址了.所以只能以收藏方式发表. ...

  5. ubuntu 中 pip 出现 ModuleNotFoundError: No module named ‘pip._internal‘

    ubuntu 中 pip 出现 ModuleNotFoundError: No module named 'pip._internal' 文章目录 ubuntu 中 pip 出现 ModuleNotF ...

  6. vs2019 MFC 中 cannot open include file 'afxres.h' 问题解决方法

    vs2019 MFC 中 cannot open include file 'afxres.h' 问题解决方法 使用Everything查找afxres.h文件,如果没有everything的,可以到 ...

  7. 在idea 中添加和删除模块Module

    在idea 中添加和删除模块Module ThinkPet 2018-12-22 10:12:50  4125  收藏 1 分类专栏: idea 版权 1.添加模块 2.删除模块 ---------- ...

  8. Android 驱动(17)---如何在linux中添加新的kernel module

    如何在linux中添加新的kernel module 该SOP针对客户如何添加一个kernel module,并把生成的.ko打包进system.img的过程. 解决方案 L版本(version> ...

  9. python中根据字符串导入模块module

    python中根据字符串导入模块module 需要导入importlib,使用其中的import_module方法 import importlibmodname = 'datetime'dateti ...

  10. fortran中如何提供计算程序运行时间?

    fortran中如何提供计算程序运行时间? 如下: Real time_begin , time_end1 , time_end2 Integer i , j call CPU_TIME(time_b ...

最新文章

  1. 各互联网大厂办公室恋情政策盘点:最不能碰的部门竟是HR!
  2. 熵增学院-Anders-剑走偏锋,了解Spring Boot内部Servlet容器
  3. Notepad++ 查找匹配中文
  4. c++ requests网络请求库
  5. c++ 结构体构造函数使用总结 附一道经典模拟题
  6. 假如 Go 能说话,听听 GMP 的心声
  7. .NET的一点历史故事:招兵买马和聚义山林
  8. 小谈React、React Native、React Web
  9. Linux 7.x 防火墙端口
  10. .net socket与完成端口、异步发送相关研究
  11. shift-and(HDU 5972 2016ICPC大连 B: Regular Number)
  12. 元胞自动机python代码_Python实现元胞自动机(康威生命游戏)
  13. 启动SQL Server服务器以及新建连接的方法
  14. 全国各地电信DNS服务器地址:
  15. mat java_使用MAT分析Java内存
  16. NOIP2012 国王游戏(贪心)
  17. 如何在数据库mysql中储存图片
  18. opencv-python学习笔记(十一)—— 图像处理之图像直方图
  19. php或js判断网站访问者来自手机或者pc机
  20. java 生成纯色图片_canvas简单实现纯色背景图片抠图(示例代码)

热门文章

  1. win7 C盘满如何清理
  2. python笔记:7.2.2.2 一元多因素方差分析_交互效应(购房面积影响因素交互效应)
  3. html水印生成pdf,如何在jsPDF中添加PDF生成水印?
  4. 【rac asm扩容】在vmware workstation中配置集群(rac)的共享存储(磁盘)方法(流程)
  5. 解决文件不显示后缀名的问题
  6. 营销哲学:小胜凭智,大胜靠德
  7. 日本公司推出第一款MR购物应用,今秋上市
  8. 硬编码支持情况(一)
  9. 【运筹学】线性规划数学模型 ( 线性规划三要素 | 一般形式 | 标准形式 | 标准形式转化 | 可行解 | 最优解 | 基 | 基向量 | 基变量 | 非基变量 ) ★★
  10. 参考文献在论文中进行引用标注