参考:彭国伦:《Fortan 95程序设计》,2002年。第8章,第11章

结构

  1. Module中的变量
  2. Module中的自定义类型
  3. Module中的函数
  4. Public, Private
  5. Use

使用场景:Module可以用来封装程序模块,通常用来把程序中,具备相关功能的函数及变量封装在一起(在Fortran 90中新加入的)

基本语法:

module module_nameimplicit none! declaration of variables
... ...end module [module_name]

1. Module中的变量

按之前的介绍,全局变量用COMMON实现。详见:http://t.csdn.cn/AsrUe

通过Module也可实现全局变量,

方法一:使用COMMON

方法二:在Module中定义的变量通过SAVE属性修饰

module globalimplicit none! 全局变量的方式1:commmon修饰integer :: global_acommon global_a! 全局变量的方式2:save属性integer,save :: global_b! ?全局变量(使用ivf编译器),其他编译器可能为局部变量integer :: global_c
end module globalprogram module_variableuse globalimplicit none! Variables! Body of Program! global_x are variable in module globalwrite(*, *) global_a, global_b, global_ccall module_f()write(*, *) global_a, global_b, global_cstop
end program module_variablesubroutine module_f()use globalimplicit noneglobal_a = 111global_b = 222global_c = 333
end subroutine module_f

输出结果为:

           0           0           0111         222         333

尽管不同的编译器对于没有save修饰的module中的变量是否为全局变量处理方式可能不尽相同,但是,这里提醒我们要注意module中的变量生存周期。

上例还包含了使用Module的若干规则:

  1. 需要使用这些变量的函数时(在program或这某个module中)只要USE这个Module即可;
  2. Module的代码需要需要编写在USE Module之前。

2. Module中的自定义类型

若试图在不同的函数中使用自定义类型(TYPE),应当试图让这些函数“明白”该自定义类型。一个常用的方法是将自定义类型封装在某个Module中,在需要使用的地方USE这个Module。

示例:

module module_pupilimplicit nonetype :: pupilinteger :: agereal :: heightcharacter :: genderend type
end module module_pupilprogram module_typeuse module_pupilimplicit nonetype(pupil) :: pup_onepup_one = pupil(8, 130.0, 'B')call show_pup( pup_one )
end program module_typesubroutine show_pup(pup)! 使用module_pupil,让函数知道type(pupil)use module_pupilimplicit nonetype(pupil) :: pupwrite(*, *) pup
end subroutine

输出结果为:

           8   130.0000     B

3. Module中的函数

语法:

在关键词contains之后添加函数

module module_name... ...! 声明相关变量,自定义类型... ...containssubroutine sub_name... ...... ...end subroutine sub_namefunction func_name... ...... ...end function func_nameend module

同一个Module中,函数可以直接使用所声明的变量(注意,变量声明在前,contains之后才是函数的定义;module中不允许对变量进行赋值的操作!!!)

Visual Fortran提供一些扩充函数库就用这个方法来归类:
数值函数库,IMSL,存放在module IMSL中;
3D绘图库,OpenGL,存放在module OpenGL中。

使用前须 use IMSL, use OpenGL


4. Public, Private

Module里面的变量和函数,可以通过Public或Private来区分成公开或私有。

公开,就是任何Use这个Module的地方都可访问(默认的)。

私有,就是相关变量和函数仅限于该Module内部使用。

一些使用问题放在重载,继承的部分介绍。。。


5. Use

编写好Module之后,要使用Use命令才能让Module外的函数使用Module里面的东西。

为了避免变量或函数名称重复,Use命令后面,可以临时把Module里面的变量或函数名称改名。

语法:

module mod_aimplicit noneinteger vacontainsfunction fa(...)...end function
end module mod_aprogram renameuse mod_a, aa=>va, ba=>faimplicit none...
end program rename

如果不需要使用Module中的所有公开的变量、函数,可以通过Only命令来选择只使用部分。这样可以避免重名的问题。

语法:

module mod_aimplicit noneinteger vacontainsfunction fa(...)...end function
end module mod_aprogram renameuse mod_a, only: fa! only后也可重命名! use mod_a, only: ba=>fa implicit none...
end program rename

Fortran笔记,Module相关推荐

  1. TI mmWave radar sensors Tutorial 笔记 | Module 4 : Some System Design Topics

    本系列为TI(Texas Instruments) mmWave radar sensors 系列视频公开课 的学习笔记. 视频网址: https://training.ti.com/intro-mm ...

  2. Fortran笔记,文件,part2-顺序/直接访问文件,二进制文件

    ​参考资料:彭国论,<Fortran 95程序设计>,2002年 第9章​ 顺序访问文件 直接访问文件 二进制文件的操作 内部文件 1. 顺序访问文件 顺序文件读写时,不能任意赋值到文件的 ...

  3. Fortran笔记,指针-Part1

    参考:彭国伦:<Fortan 95程序设计>,第10章,2002年 指针最简单的应用可以用来保存变量,或者是动态使用内存.更进一层则可以应用在特别的"数据结构"上,例如 ...

  4. js-ES6学习笔记-module(4)

    1.<script>标签打开defer或async属性,脚本就会异步加载.渲染引擎遇到这一行命令,就会开始下载外部脚本,但不会等它下载和执行,而是直接执行后面的命令. defer与asyn ...

  5. Fortran笔记,文件,part1-文件读取的概念、基本操作

    参考资料:彭国论,<Fortran 95程序设计>,2002年 第9章 1. 文件读取的概念 读取文件:顺序读取 vs 直接读取 顺序:从头到尾读取 直接:跳到指定行列读取 保存文件:文本 ...

  6. js-ES6学习笔记-module(2)

    1.如果想为输入的变量重新取一个名字,import命令要使用as关键字,将输入的变量重命名. import { lastName as surname } from './profile'; 2.im ...

  7. python编译器如何设置中文_如何使setup.py test使用特定的fortran编译器?

    我正在尝试测试一个包含一些f90文件的package.如果我构建或安装并指定fortran编译器,它可以正常工作.但是,当我尝试测试时,会出现以下错误:C:\Users\jsalvatier\work ...

  8. 多个python编译器指定_python – 如何让setup.py测试使用特定的fortran编译器?

    我正在尝试测试包含一些f90文件的package.如果我构建或安装并指定fortran编译器,它可以正常工作.但是,当我尝试测试时,我收到以下错误: C:\Users\jsalvatier\works ...

  9. Node开发项目管理工具 Grunt 对比 Gulp

    转自Gulp vs Grunt 1. Grunt -> Gulp 早些年提到构建工具,难免会让人联想到历史比较悠久的Make,Ant,以及后来为了更方便的构建结构类似的Java项目而出现的Mav ...

最新文章

  1. 第 3 章 镜像 - 014 - 镜像的缓存特性
  2. python兼职 在家工作-在家兼职的人或者是自由职业的人都在做什么?
  3. 阿里云 OAM 入选「2020中国技术力量年度榜单」,定义云原生应用交付标准
  4. Java最佳实践– Char到Byte和Byte到Char的转换
  5. 什么事数据科学_如果您想进入数据科学,则必须知道的7件事
  6. 学计算机写作文怎么写,关于学电脑的作文
  7. python 局域网通信_python实现局域网内实时通信代码
  8. 战神背光键盘如何关系_苹果新专利:未来键盘或用彩色背光向用户提供有用的反馈...
  9. 面试笔试杂项积累-Unity
  10. 08-搭建Rest服务 - 04权限管理
  11. 【python】【Gif制作】使用多张图片合成gif动图
  12. linux sftp 重命名,SFTP对文件重命名 删除 退出 查看
  13. BAPI_PO_CREATE1--单价增大10倍问题
  14. 信息流广告投放相关概念与技术(DSP等,OCPA)
  15. 哦买噶!李佳琦重现淘宝直播间!机器学习工程师的提效神器;『优化导论』神书;『IE521 凸优化』课程资料 | ShowMeAI资讯日报
  16. 票据撮合区块链系统开发-去中心化的新型票据交易展现形式的系统
  17. JSP中img标签图片在浏览器中不显示问题
  18. 路由桥接 新增路由 扩大wify 一个网线两个wify
  19. 2856. 仰望星空
  20. Python小例子——利用递归绘制分形树

热门文章

  1. win10安装CH341SER.INF 失败 且没有COM口问题(德飞莱CH340T)
  2. ReactiveX -Rx
  3. 幼儿园科学计算机课程,幼儿园科学课程
  4. 1503172126-ny-小媛在努力
  5. Unity优化技巧,此时无光胜有光
  6. codeforces 1546B AquaMoon and Stolen String
  7. 不属于python特点的是_Python程序设计课后习题答案-第一单元
  8. 有空就来刷几道5G面试题系列 | 5G架构篇
  9. Dr_can Kalman Filter学习笔记(三)
  10. applovin 面试经验