Fortran 中的common,include和module
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相关推荐
- Fortran中function,subroutine, interface和module的简单使用
代码运行在simply fortran2下,复制,粘贴可直接运行看效果 !!!!!------------------- ! Fortran中函数分两类:子程序(subroutine)和自定义函数(f ...
- fortran语言和python_如何在Fortran中调用Python
Python是机器学习领域不断增长的通用语言.拥有一些非常棒的工具包,比如scikit-learn,tensorflow和pytorch.气候模式通常是使用Fortran实现的.那么我们应该将基于Py ...
- fortran中类型
- 由于 GNU 的 Fortran 和 C 语言二者的函数彼此可以直接相互调用,所以混合编程可以非常容易地实现.只要你足够仔细,确保函数调用时传递的参数类型正确,函数就可以在两种语言间来回调用,就像 ...
- 演练VC中的COMMON一族(转贴)之一 1
声明:由于在CSDN论坛看到不少VC新手问及VC控件的使用.本人手头正好有一份以前下载到的一份资料,讲述的比较详细.所以发出来和大家共享.但由于时间久远,已不及得下载的地址了.所以只能以收藏方式发表. ...
- ubuntu 中 pip 出现 ModuleNotFoundError: No module named ‘pip._internal‘
ubuntu 中 pip 出现 ModuleNotFoundError: No module named 'pip._internal' 文章目录 ubuntu 中 pip 出现 ModuleNotF ...
- vs2019 MFC 中 cannot open include file 'afxres.h' 问题解决方法
vs2019 MFC 中 cannot open include file 'afxres.h' 问题解决方法 使用Everything查找afxres.h文件,如果没有everything的,可以到 ...
- 在idea 中添加和删除模块Module
在idea 中添加和删除模块Module ThinkPet 2018-12-22 10:12:50 4125 收藏 1 分类专栏: idea 版权 1.添加模块 2.删除模块 ---------- ...
- Android 驱动(17)---如何在linux中添加新的kernel module
如何在linux中添加新的kernel module 该SOP针对客户如何添加一个kernel module,并把生成的.ko打包进system.img的过程. 解决方案 L版本(version> ...
- python中根据字符串导入模块module
python中根据字符串导入模块module 需要导入importlib,使用其中的import_module方法 import importlibmodname = 'datetime'dateti ...
- fortran中如何提供计算程序运行时间?
fortran中如何提供计算程序运行时间? 如下: Real time_begin , time_end1 , time_end2 Integer i , j call CPU_TIME(time_b ...
最新文章
- 各互联网大厂办公室恋情政策盘点:最不能碰的部门竟是HR!
- 熵增学院-Anders-剑走偏锋,了解Spring Boot内部Servlet容器
- Notepad++ 查找匹配中文
- c++ requests网络请求库
- c++ 结构体构造函数使用总结 附一道经典模拟题
- 假如 Go 能说话,听听 GMP 的心声
- .NET的一点历史故事:招兵买马和聚义山林
- 小谈React、React Native、React Web
- Linux 7.x 防火墙端口
- .net socket与完成端口、异步发送相关研究
- shift-and(HDU 5972 2016ICPC大连 B: Regular Number)
- 元胞自动机python代码_Python实现元胞自动机(康威生命游戏)
- 启动SQL Server服务器以及新建连接的方法
- 全国各地电信DNS服务器地址:
- mat java_使用MAT分析Java内存
- NOIP2012 国王游戏(贪心)
- 如何在数据库mysql中储存图片
- opencv-python学习笔记(十一)—— 图像处理之图像直方图
- php或js判断网站访问者来自手机或者pc机
- java 生成纯色图片_canvas简单实现纯色背景图片抠图(示例代码)
热门文章
- win7 C盘满如何清理
- python笔记:7.2.2.2 一元多因素方差分析_交互效应(购房面积影响因素交互效应)
- html水印生成pdf,如何在jsPDF中添加PDF生成水印?
- 【rac asm扩容】在vmware workstation中配置集群(rac)的共享存储(磁盘)方法(流程)
- 解决文件不显示后缀名的问题
- 营销哲学:小胜凭智,大胜靠德
- 日本公司推出第一款MR购物应用,今秋上市
- 硬编码支持情况(一)
- 【运筹学】线性规划数学模型 ( 线性规划三要素 | 一般形式 | 标准形式 | 标准形式转化 | 可行解 | 最优解 | 基 | 基向量 | 基变量 | 非基变量 ) ★★
- 参考文献在论文中进行引用标注