Fortran95第7章 属性的声明Word格式.docx
- 文档编号:820659
- 上传时间:2023-04-29
- 格式:DOCX
- 页数:62
- 大小:45.67KB
Fortran95第7章 属性的声明Word格式.docx
《Fortran95第7章 属性的声明Word格式.docx》由会员分享,可在线阅读,更多相关《Fortran95第7章 属性的声明Word格式.docx(62页珍藏版)》请在冰点文库上搜索。
POINTER
TARGET
值设置
DATA
PARAMETER
对象可访问性与调用
PUBLIC
PRIVATE
INTENT
OPTIONAL
SAVE
过程属性
EXTERNAL
INTRINSIC
对象关系属性
NAMELIST
EQUIVALENCE
COMMON
这些关键词的使用,或者说属性的声明有2种方式:
●
在类型声明时附加属性说明,这种语句形式侧重在给出数据对象,属性说明是附加的;
使用单独的属性声明语句,这种语句形式侧重在说明属性本身。
之所以会出现2种声明方式,完全是历史的缘故。
FORTRAN的早期版本里,任何的对象属性说明,都是运用单独的属性声明语句,如果一个数据对象同时具有多种属性,就需要使用相应的多个属性声明语句,从程序阅读的角度来看,会显得很烦琐,因此到了FORTRAN90和95版本,只要在程序单元当中需要声明一个数据对象的类型,那么就可以把它的其他所有属性都附加到它的类型声明语句当中,使得程序显得更加紧凑。
【例7-1】我们要定义2个实型变量X,Y,同时还要声明它们都具有指针属性,在早期FORTRAN语言里写为:
REALX,Y
POINTERX,Y
换一种更加紧凑的写法就是把这2条语句写为1句:
REALPOINTER:
:
X,Y
之所以我们还需要讨论单独的属性语句,主要是有时候需要保持源码的向前兼容性,而且在少数情况下,这2种形式也并完全等价。
因此在本章在讨论各种属性的声明方式的时候,将首先给出面向数据对象的声明方式,然后给出等价的面向属性的声明方式。
在这2种表示属性的方式里,同样由于历史的缘故,数组的维度属性DIMENSION既可以附加在类型声明语句当中表述,也可以单独声明,实际上DIMENSION这个关键词属于老式FORTRAN的遗留物,在新的表述方式里面,完全可以省略它。
【例7-2】
COMPLEXX
DIMENSIONX(35)
SAVEX
COMPLEXX(35)
COMPLEX,DIMENSION(35),SAVE:
X
COMPLEX,SAVE:
X(35)
以上4种表述方式是完全等价的,显然最后一种最简洁。
在一个程序单元里面,引用一个数据对象的前提是已经声明了它的种种必需属性,数据对象的各种属性里面,最为基本的当然是数据对象的类型,然后还需要声明其各种必需的属性,这样该数据对象才能被程序正确地调用访问。
然而在一个实际的程序里面,数据对象的声明在表面上可能并不是完备的,同时又不是非法的语法,出现这种情况的原因如下:
在FORTRAN的早期版本里,为了求简化的缘故,使用了一种隐式约定数据类型的方式,即通过数据对象的名称的第一个字母来分辨其所属类型,这种类型声明方式被后来的FORTRAN版本一直沿用下来了,因此如果一个程序单元里出现的数据对象没有经过类型声明语句的专门声明,则需要考虑其是否属于隐式声明。
相反,如果想排除这种隐式声明的影响,则需要另外单独加以IMPLICITNONE语句作为声明。
任何其他的属性如果没有出现的话,或者是因为该数据对象不需要某种属性,或者是该数据对象的某种属性采取了默认设置。
从上面的分类表7-1可以看到,FORTRAN的属性除了用来说明数据类型的属性之外,其他属性都是针对不同的数据类型或程序对象,以及它们的各种特征的。
例如数组属性只是用来说明数组,指针属性只是用来说明指针,而过程属性只是用来说明过程,下面将分类讨论这些属性。
7.2
类型声明语句
我们在讨论第5章讨论数据类型的时候给出数据类型的基本声明语句的句法形式,这里将侧重于数据类型的声明与其他相关属性的兼容,因为从语言的简洁与自然的角度出发,把一个数据对象的类型和其他属性都归结为一条数据声明语句是非常可取的,所以我们得到如下的一般的类型声明句法形式(R501):
type-specification[[,attribute-specification]…:
:
]entity-declaration-list
即作为选项,在一条数据对象的类型声明(type-specification)语句当中,在数据项声明的列表(entity-declaration-list)之前,给出相应的属性说明(attribute-specification),方括号[]表示可选。
类型说明(type-specification)的一般句法形式(R502)是如下几种形式之一:
INTEGER[kind-selector]
REAL[kind-selector]
DOUBLEPRECISION
COMPLEX[kind-selector]
CHARACTER[character-selector]
LOGICAL[kind-selector]
TYPE(type-name)
其中种别选择符(kind-selector)的句法形式(R506)为:
([KIND=]kind-value)
其中种别值(kind-value)是一个标量整型表达式。
属性说明(attribute-specification)的一般句法形式(R503)为如下几种形式之一:
DIMENSION(array-specification)
INTENT(intent-specification)
access-specification
其中的可访问性说明(access-specification)包括PUBLIC和PRIVATE。
数据项声明的一般句法形式(R505)为如下2种形式之一:
object-name[(array-specification)][*character-length][initialization]
function-name[(array-specification)][*character-length]
其中初始化(initialization)的一般句法形式(R505)为如下2种形式之一:
=initialization-expression
=>
NULL()
类型声明的一般规则如下:
●对数据对象的说明优先于隐式类型描述,即隐式类型描述法永远只是在数据对象没有获得任何说明的情况下的默认法则,而显式说明既可以与隐式法则一致,也可以不一致。
●在一个类型声明语句当中,同一个属性只能出现一次。
●在一个作用域内,一个数据项的任何属性只要约定了一次,就不可再次约定。
●种别选择符所取的种别值只能是编译系统所许可的相应类型的种别参数之一。
●字符长度(character-length)选项只能出现在CHARACTER类型的声明语句当中。
●如果使用初始化语句,则必须在数据项声明前使用双冒号(;
;
)。
●如果数据变量被初始化设置为数组,那么该数组的形状一定要得到说明,或者是在类型声明语句当中,或者是在同一个作用域内此前的属性声明语句当中。
●如果数据对象被赋予PARAMETER属性,那么其中必须包含初始化语句。
●如果在初始化语句当中出现符号=>
,那么该被初始化的对象必定具有POINTER属性;
如果在初始化语句当中出现符号=,那么该被初始化的对象肯定不具有POINTER属性。
●所谓函数名称(function-name),或者是一个外部函数的名称,或者是一个固有函数的名称,或者是一个函数哑过程的名称,或者是一个语句函数的名称。
●一个数组函数名称或者是被指定为显形数组,或者是具有POINTER属性,从而被指定为待定形数组。
有关属性声明的其他规则以及属性之间的兼容性在后面会详悉讨论。
【例7-3】下面是一些附加了其他属性的数据类型声明语句:
REAL,INTENT(IN):
COS
REAL,INTRINSIC:
SIN
INTEGERX(25)
LOGICAL,DIMENSION(10,15):
RESULT1,RESULT2
INTEGER,PARAMETER:
SHORT=SELECTED_INT_KIND(4)
COMPLEX:
SQUARE_ROOT=(2.76,-0.85)
REAL,ALLOCATABLE:
X(:
:
)
TYPE,POINTER:
CURRENT_OF_SAMPLE=>
NULL()
7.2.1
整型
INTEGER语句声明了整型数据对象的名称,同时也可以附加种别参数以及其他属性。
如果给出种别选择符,即说明该整型数据的表示方法。
声明一个数据对象属于整型数据的基本语句句法为:
INTEGER[([KIND=]kind-value)][[,attribute-list]:
]entry-list
【例7-4】以下这些声明语句主要是要说明数据项:
INTEGERX
INTEGERDIMENSION(:
),POINTER:
days,hours
INTEGER(SHORT)RED_BALL
INTEGER
(2)POINTER:
k,limit
INTEGER
(1)DIMENSION(10):
min
【例7-5】以下这些声明语句主要是要说明数据的属性:
INTEGERdays,hours
INTEGER
(2)k,limit
INTEGER
(1)min
DIMENSIONdays(:
),hours(:
),min(10)
POINTERdays,hours,k,limit
7.2.2
实型
REAL语句声明了实型数据对象的名称,同时也可以附加种别参数以及其他属性。
如果给出种别选择符,即说明该实型数据的表示方法。
双精度实型数据还可以使用DOUBLEPRECISION语句加以声明,当然与在REAL语句当中使用种别参数是完全等价的。
由于DOUBLEPRECISION本身指出了精度表示方法,因此不能再在后面附加种别选择符。
不过DOUBLE这个词也可以作为一个命名整型常量,取双精度实型的种别参数值,这样就可以使用REAL(DOUBLE)来声明双精度实型数据了。
实型数据的声明的格式如下:
REAL[([KIND=]kind-value)][[,attribute-list]:
DOUBLEPRECISION
[,attribute-list]:
【例7-6】下面是各种形式的主要说明数据项的声明语句:
REAL(KIND=high),OPTIONAL:
testval
REAL,SAVE:
a(10),b(20,30)
DOUBLEPRECISION,POINTER:
A,B(:
,:
)
DOUBLEPRECISION,DIMENSION(5,10):
TABLE1,TABLE2
REAL(DOUBLE),POINTER:
REAL(DOUBLE),DIMENSION(5,10):
【例7-7】下面是各种形式的主要说明数据属性的声明语句:
REAL(KIND=high)testval
REALa(10),b(20,30)
OPTIONALtestval
SAVEa,b
DOUBLEPRECISIONTABLE1,TABLE2
DIMENSIONTABLE1(5,10),TABLE2(5,10),B(:
POINTERA
可以比较什么两种表示方法,在说明了同样的意思的前提下,把属性说明附加在数据类型说明语句当中,比每一种属性单独一个语句加以说明要简洁自然得多。
7.2.3
复型
COMPLEX语句声明了复型数据对象的名称,同时也可以附加种别参数以及其他属性。
如果给出种别选择符,即说明该复型数据的表示方法。
说明复型数据类型的句法为:
COMPLEX[([KIND=]kind-value)][[,attribute-list]:
【例7-8】下面是各种形式的复型数据对象声明语句:
COMPLEXch
COMPLEX(KIND=4),PRIVATE:
zz,yy
!
等价于COMPLEX*8zz,yy
COMPLEX(8)ax,by
等价于COMPLEX*16ax,by
COMPLEX(kind(4))y(10)
complex(kind=8)
x,z(10)
7.2.4
逻辑型
LOGICA语句声明了逻辑型数据对象的名称,同时也可以附加种别参数以及其他属性。
如果给出种别选择符,即说明该逻辑型数据的表示方法。
说明逻辑型数据类型的句法为:
LOGICAL[([KIND=]kind-value)][[,attribute-list]:
【例7-9】下面是各种形式的主要说明逻辑型对象的声明语句:
LOGICAL,ALLOCATABLE:
flag1,flag2
LOGICAL(KIND=byte),SAVE:
doit,dont
【例7-10】下面是各种形式的主要说明对象的属性的声明语句:
LOGICALflag1,flag2
LOGICAL(KIND=byte)doit,dont
ALLOCATABLEflag1,flag2
SAVEdoit,don’t
7.2.5字符型
CHARACTER语句声明了字符型数据对象的名称,同时也可以附加种别参数以及其他属性。
如果给出字符选择符,即说明该字符型数据的最大字符长度。
说明字符型数据类型的句法为:
CHARACTER[character-selector][,attribute-list:
其中的字符选择符(character-selector)的句法形式(R507)可以为如下几种:
length-selector
(LEN=length-value,KIND=kind-value)
(length-value,[KIND=]kind-value)
(KIND=kind-value
[,LEN=length-value])
其中长度选择符(length-selector)的句法形式(R508)可以是:
([LEN=]length-value)
*character-length[,]
其中字符长度(LEN)(R509)可以是:
(length-value)
scalar-integer-literal-constant
其中长度值(length-value)(R510)可以是:
specification-expression
*
在上面的类型说明当中,使用星号*来标志字符长度的方式属于过时的方式,不过不是指在数据项里面使用的星号*。
字符型数据对象类型声明语句的一般规则如下:
●只有在没有使用双冒号的情况下,在长度选择符里才可以使用逗号。
●字符型数据对象的字符长度在一定的情形下,是可以发生动态变化的,即当一个字符型数据的声明语句出现在一个过程或者是过程界面当中,同时该数据对象又不是某个派生数据对象的成员,那么它的字符长度可以使用非常量表达式,该表达式的具体取值只有当访问该过程时才被确定,并且当该过程的运行时,表达式里变量的变化并不影响字符长度值。
这样一种数据对象如果不属于哑元,则属于自动数据对象的范畴。
●字符长度的说明有三种情形:
•首先在数据项或数据项列的成员里给出字符长度;
•如果没有上面的长度说明,则在数据类型说明部分给出命名字符数据项或派生类型定义当中的字符成员的字符选择符,用来给出长度属性;
•如果一个字符型数据既没有使用字符选择符,也没有使用字符长度来说明其长度,那么默认的字符长度为1。
●如果长度参数取负值,那么相应的字符项长度为0。
●给定了字符长度的标量整型文字常量不能再附加任何种别参数,否则在固定源码形式里面就会导致歧义。
●采用带星号*的长度说明只能使用于以下几种情形:
•可以应用于过程的哑元,当过程被调用时,哑元就被赋予相应实元的长度;
•可以用于声明命名常量,这时它的长度是一个常量值;
•可以用于声明一个外部函数的结果变量的长度。
任何调用该函数的作用域单元如果使用带星号的长度说明,就意味着主程序可以访问该声明。
当函数被调用的时候,结果变量的长度的取值由引用该函数的程序单元里面的相应声明语句决定。
本规则暗示了在IMPLICIT语句当中不能使用带星号*的长度说明方式。
●如果一个函数属于内部函数或模块函数,或者该函数的值为数组,指针或递归形式,那么该函数名不能使用带星号*的长度声明。
●字符值语句函数或字符型语句函数哑元的长度必须是整型常量表达式。
【例7-11】下面是各种形式的主要说明字符型数据对象的声明语句:
CHARACTER(LEN=25,KIND=GREEK),DIMENSION(11):
Z1
CHARACTER(LEN=20,KIND=KANJI),SAVE:
GREETING
(2)
CHARACTER(10):
QUESTION=“WHERE?
”
CHARACTER(LEN=*,KIND=CHINESE),PARAMETER:
MESSAGE=&
“简朴是语言的一种美德”
CHARACTER(*),INTENT(IN):
SCHOOL,HOME
CHARACTER*3,SAVE:
COMPONENT_1,LONGER(9)*20,COMPONENT_2
CHARACTER:
RESULT=“PASS”
例7-12:
下面是各种形式的主要说明字符型数据的属性的声明语句:
CHARACTER(70)PROJECT
CHARACTER(LEN=30,KIND=GERMAN)TRANSFORMATION
CHARACTER(LEN=25,KIND=GREEK)Z1
CHARACTER(LEN=20,KIND=KANJI)GREETING
(2)
CHARACTER(10)QUESTION
CHARACTER(*)SCHOOL,HOME
CHARACTER*3COMPONENT_1,LONGER(9)*20,COMPONENT_2
CHARACTER
RESULT
SAVEGREETING
(2)
INTENT(IN)SCHOOL,HOME
DATAQUESTION/“WHERE?
”/
CHARACTER(*)MESSAGE
PARAMETER(MESSAGE=&
“简朴是语言的一种美德”)
7.2.6
派生类型
TYPE语句声明了用户派生数据类型对象的名称,派生类型的名称写在紧跟TYPE后面的一对括号当中,声明派生类型的数据对象的一般句法为:
TYPE(type-name)[,attribute-list:
派生类型声明语句的一般规则如下:
●如果一个派生类型对象是私有的话,就不能附加PUBLIC属性。
●结构构造器必须用来初始化派生类型数据对象,结构构造器里的表达式必须是初始化表达式。
●如果需要声明的派生数据对象是一个函数的结果,那么它就可以在FUNCTION语句当中予以说明。
【例7-13】下面是各种形式的主要说明派生数据对象的声明语句:
TYPE(SAMPLE),DIMENSION(:
),ALLOCATABLE:
STOVE
TYPE(STUDENT),SAVE:
GRAD(5)
TYPE(HOMEWORK),SAVE:
QUESTION,TAPE,WORD_SHEET
【例7-14】下面是各种形式的主要说明派生数据对象的属性的声明语句:
TYPE(SAMPLE)STOVE
TYPE(STUDENT)GRAD(5)
TYPE(HOMEWORK)QUESTION,TAPE,WORD_SHEET
DIMENSION
STOVE(:
ALLOCATABLE
STOVE
SAVE
GRAD(5),
QUESTION,TAPE,WORD_SH
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Fortran95第7章 属性的声明 Fortran95 属性 声明
![提示](https://static.bingdoc.com/images/bang_tan.gif)