3.1.1 空行
在程序“段落”之间加入空行,可以使程序的逻辑结构更加清楚,程序段落更加明白。 如
PROGRAM Foo USE module_a USE module_b
IMPLICITE NONE REAL :: time REAl :: value INTEGER loop value = 3.1415926 WRITE(*,*) value END PROGRAM Foo 3.1.2 空格
在一行中加入一些空格,可以使程序更易读,如在赋值号左右至少加一个空格,在逗号后加一个空格。
!Initialize variables X=1
MeaningfulName=3 RealNumber=5 可改写为:
!Initialize variables X = 1 MeaningfulName = 3 RealNumber = 5 3.1.3 缩进
为了能够更加清楚的显示程序的逻辑结构,我们采用四格缩进的方法,即在上一行开始处空三格在第四格开始书写。例如下面是IF 语句块的一个示例: !Example If block IF(...) THEN ! a comment
DO Loop = 1, EndLoop ! another comment
6
... code statements ... END DO
ELES IF ( ... ) THEN ! another comment
... ... code statements ... ... END IF 3.2 程序文档及注释
程序文档和注释可以帮助读者了解仅看程序不易或无法了解的信息,这有几个层次: 程序外应有科学文档、程序文档及用户指南等软件文档。 在程序头应有程序头文件在程序中应有段落注释及行注释。 3.2.1 软件文档
软件工程中除了要编写工程文档外,还要编写软件文档,这是软件工程必不可少的部分。
多数情况下,程序软件文档提供软件包级的文档,而不是单个程序的文档,它包括:
科学文档:陈述软件包拟解决的问题以及采用方法的基本原理。该文档与代码本身无关。
程序文档:说明在科学文档中描述的方法的实现。所有软件包中的程序都要列出并作简短的功能说明,并列出软件包中各程序的调用关系树(或流程图)。
用户指南:详细描述软件包的输入输出参数和文件。这包括软件包内程序的参数、开关值、可调参数的取值范围,要说明缺省值和敏感值的范围。要对读入的文件和namelist有详细的说明。 3.2.2 程序头文件
每个程序都要有头文件,一般放在程序开头,内容包括本程序模块的功能和目的说明、模块的接口说明(如调用实例、参数描述和子模块清单等)、有关数据的说明(如重要的变量及其用途、约束和限制条件,以及其它有关信息)、开发历史记录(包括模块设计与编程人员名单、复审人员及复审日期、修改日期和有关说明等);头文件还描述程序的函数、引用的外部文档和程序使用的变量,程序中使用的变量都要在头文件中声明并注明用途。
附录A 给出了程序头文件的标准模板。文件头的写法将在第六章中详细讨论。
3.2.3 程序注释
程序内部的注释说明本段或本行程序代码的含义或要进行的操作。
片段注释:把代码分成一些逻辑片段,注释放在定义片段开始的部分,它嵌在程序体内用以描述处理功能,如在函数/子程序/过程语句调用前后,循环语
7
句前后以及重要语句旁边都要加上注释语句。片段注释的目的是说明代码某一部分的功能,它应当放在要注释的代码行上,或者放在要注释的代码行的前一行。注释应当顺序编号,如使用1.0,2.0 等:
!---------------------------------------------? ! <片段号> <片段标题>
!---------------------------------------------?
建议:软件文档使用中文编写,并提供相应的英文摘要;程序头和注释全部使用英文编写。
3.3 有意义的名称
给文件、子程序、常量、变量一个有意义的名称。一般的做法是用相应的英文或缩写、习惯名称命名。
选择一个有意义的名称,在程序中始终不变;
当需要缩写时,采用统一的方法,如当给一组与“Data refresher ”有关的函数命名时,可用dr_规定;
缩写应避免误解,如不要用inch 表示input char ,可用in_char 表示;
用下划线使名称更易读;
可使用长变量名增加可读性,但是不宜过长;
各名称之间必须使用有两个或以上的字符不相同,以免混淆,如systet 与systest ;
不要用大小写来区分变量;
导出类型的名、模块名、子程序名、函数等不能与变量名同名。虽然有些Fortran 是
允许的,但是为了避免混淆,我们规定不许同名。 3.3.1 标准名称
以下列出了一些标准的短变量的习惯命名法: c characters i,j,k 下标 n 计数器 p,q 指针 s 字符串 3.3.2 名称的大小写
虽然Fortran 不区分大小写(字符型除外),为了更加容易区分各种名称,我们规定各种名称书写的大小写规范,但是在使用通常的习惯用法给变量命名时,不受这个限制。
变量名 用小写,字与字之间加下划线,但气象上某些有特别含义的变
8
量用法除外,如:T 表示温度等
子程序、函数名 第一个字母用大写,不用下划线,如:CreatDomain 常量 全部用大写,字之间可用下划线 模块名 全部用小写,字之间用下划线,并以前缀module_开头
派生类型名 全部用小写,字之间用下划线,并以前缀type_开头。
4. 建议采用cvs管理程序
CVS首先是一个版本管理系统,它可以保留软件开发过程中的每一个版本的信息,包括谁、在何时、作了什么样的修改以及为什么作这样的修改等。它的最大的特点是它的并发性,即它支持分布式项目的开发。一个程序员开发出了自己负责模块的新版本后,迅速的通过CVS让开发组的每一个成员都分享自己的最新成果。甚至,CVS通过特定的机制允许多个程序员同时修改同一个源程序文件。
9