数据使用指南
立即解锁
发布时间: 2025-08-16 01:29:54 阅读量: 11 订阅数: 38 


Fortran 2003: 完整语法与特性指南
### 数据使用指南
#### 1. 常量与变量
常量是值不能改变的量,对常量的引用是被允许的,但常量不能被重新定义。常量有以下两种形式:
- 字面常量
- 命名常量
每种内置类型都有指定其类型、类型参数和值的字面常量形式。对于用户定义类型,有结构构造函数来指定类型的值。数组构造函数用于形成任何内置或用户定义类型的数组值。
变量可以是任何类型,但在某些上下文中,变量必须是特定类型。在大多数情况下,如逻辑变量、字符变量或默认字符变量等术语提供了精确的限制。具有常量父对象的子对象不是变量,也可能不是常量,它被归类为常量的子对象。
#### 2. 指示符
数据对象可以有指示符,如 A 或 B(I)。指示符有以下几种类型:
- 对象名
- 数组元素
- 数组段
- 结构组件
- 子字符串
单个对象是标量,一组相同类型和类型参数的标量对象可以排列成数组。数组的秩在 1 到 7 之间,标量的秩为 0。数组元素是数组中的一个标量元素,数组段是数组元素的一个子集,结构组件是派生类型对象的一个组件,子字符串是字符字符串的一个连续部分。
指示符的形式为:
```plaintext
part [ % part ]... [ ( substring-range ) ]
```
其中 part 的形式为:
```plaintext
part-name [ ( section-subscript-list ) ]
```
子字符串范围的形式为:
```plaintext
[ starting-position ] : [ ending-position ]
```
起始和结束位置必须是标量整数表达式。
部分下标有以下几种类型:
- 下标
- 下标三元组
- 向量下标
指示符的规则和限制如下:
1. 如果指示符以子字符串范围结尾,最右边的部分名必须是字符类型。
2. 如果出现子字符串范围且最右边的部分名具有维度属性,则最右边的部分必须有部分下标列表。
3. 在包含部分下标列表的部分中,部分下标的数量必须等于部分名的秩。
确定有效指示符分类的规则如下:
1. 单部分指示符可以指定任何类型的标量或数组、子字符串、数组元素或数组段。
2. 如果出现子字符串范围且没有部分的秩大于 0,则指示符指定子字符串。
3. 如果除最右边部分外没有部分的秩大于 0,且最右边部分有下标列表,则指示符指定数组元素。
4. 如果除最右边部分外有部分的秩大于 0,或最右边部分包含至少一个下标三元组或向量下标的部分下标列表,则指示符指定数组段。
5. 如果有多个部分且前面的情况都不成立,则指示符指定结构组件,该组件可以是标量或整个数组。
以下是一些指示符分类的示例:
```fortran
TYPE PERSON
INTEGER AGE
CHARACTER (LEN = 40) NAME
END TYPE PERSON
TYPE(PERSON) CHIEF, FIREMEN(50)
CHARACTER (20) DISTRICT, STATIONS(10)
DISTRICT(1:6) ! substring
STATIONS ! array of character strings
STATIONS(1) ! array element (character string)
STATIONS(1:4) ! array section of character strings
STATIONS(1)(15:16) ! substring of an array element
STATIONS(:)(15:16) ! array section (of substrings)
CHIEF%AGE ! structure component (integer scalar)
FIREMEN(I) % AGE ! structure component (integer scalar)
FIREMEN%AGE ! array section (of integers)
```
#### 3. 类型参数查询
内置或用户定义类型的对象可能有类型参数。内置类型有种类和长度类型参数,用户定义类型可能有用户命名的参数,如 SIZE 或 NUM。类型参数查询返回数据对象的类型参数值,形式为:
```plaintext
designator % type-parameter-name
```
类型参数查询虽然语法与结构组件引用相似,但语义不同。它不是变量,不能在赋值语句中定义,只能作为表达式的主元或实际参数出现。即使指示符是数组,它也是标量,且指示符不必定义。内置函数 KIND 和 LEN 也可用于查询某些类型参数。
类型参数查询的规则和限制如下:
1. 查询的类型参数名必须是指定指示符类型的类型参数名。
2. 未关联的指针或未分配的可分配对象的延迟类型参数不能被查询。
以下是类型参数查询的示例:
```fortran
INTEGER, PARAMETER :: DOUBLE = KIND (0.0D0)
REAL (DOUBLE) :: X, TEMP (20)
CHARACTER (10) :: TITLE
TYPE PROPERTIES (NUM)
INTEGER, LEN :: NUM
REAL :: ACREAGE (NUM)
END TYPE
TYPE (PROPERTIES(:)), ALLOCATABLE :: LIST
ALLOCATE (TYPE (PROPERTIES (NUM = 1000)) :: LIST (100) )
X % KIND ! Same value as KIND (X)
TITLE % LEN ! Same value as LEN (TITLE)
TEMP(10) % KIND ! Same value as KIND (TEMP)
LIST % NUM ! 1000 because LIST has been allocated with NUM = 1000
```
#### 4. 子字符串
字符字符串由零个或多个字符组成,在 Fortran 中,字符字符串是标量,这与其他语言(如 C)不同。可以声明字符字符串数组,且所有元素长度相同。
子字符串是父字符串的一个连续部分,有起始和结束位置。父字符串可以是以下几种类型:
- 标量变量名
- 数组元素
- 标量结构组件
- 标量常量
子字符串的规则和限制如下:
1. 子字符串的父字符串必须是字符类型,子字符串也是字符类型。
2. 子字符串是从起始位置到结束位置的连续字符序列。如果省略起始位置,默认值为 1;如果省略结束位置,默认值为字符字符串的长度。
3. 字符字符串或子字符串的长度可以为 0,但不能为负。当起始位置大于结束位置时,会产生长度为 0 的字符串。字符串长度的计算公式为:
```plaintext
MAX ( en
```
0
0
复制全文
相关推荐





