Fortran变量声明与属性详解
立即解锁
发布时间: 2025-08-16 01:29:53 阅读量: 16 订阅数: 38 


Fortran 2003: 完整语法与特性指南
# Fortran 变量声明与属性详解
在编程中,变量的声明和属性设置是非常重要的基础操作。本文将详细介绍 Fortran 语言中指针、目标属性、值定义属性等相关内容,包括参数属性、显式初始化、数据语句、保存属性和异步属性等。
## 1. 指针与目标属性
### 1.1 指针规则
指针在使用前必须与可引用或定义的目标相关联,否则不能被引用或定义。以下是指定 `POINTER` 属性的示例:
- **面向实体**:
```fortran
TYPE (NODE), POINTER :: CURRENT
REAL, POINTER :: X (:, :), Y (:)
PROCEDURE (), POINTER :: HANDLER
```
- **面向属性**:
```fortran
TYPE (NODE) CURRENT
REAL X (:, :), Y (:)
PROCEDURE () :: HANDLER
POINTER CURRENT, X, Y, HANDLER
```
### 1.2 目标属性
具有 `TARGET` 属性的对象在程序执行期间可以成为指针的目标。该属性的主要目的是帮助编译器生成高效代码。如果一个对象没有 `TARGET` 属性,则不能通过指针访问其任何部分;如果一个对象具有 `TARGET` 属性,则其所有子对象也具有该属性。
`TARGET` 属性可以在类型声明语句或 `TARGET` 语句中指定。`TARGET` 语句的形式为:
```fortran
TARGET [ :: ] object-name [ ( array-spec ) ] &
[ , object-name [ ( array-spec ) ] ] ...
```
以下是指定 `TARGET` 属性的示例:
- **面向实体**:
```fortran
TYPE (NODE), TARGET :: HEAD_OF_LIST
REAL, TARGET, DIMENSION (100, 100) :: V, W (100)
```
- **面向属性**:
```fortran
TYPE (NODE) HEAD_OF_LIST
REAL V, W (100)
DIMENSION V (100, 100)
TARGET HEAD_OF_LIST, V, W
```
## 2. 值定义属性
### 2.1 参数属性
`PARAMETER` 属性表示一个命名常量。命名常量只能定义一次,不能重新定义,其值在编译时已知,因此可以在一些不允许使用变量的上下文中使用。命名常量可以是任何类型。
`PARAMETER` 属性可以在类型声明语句或 `PARAMETER` 语句中指定。`PARAMETER` 语句的形式为:
```fortran
PARAMETER ( named-constant=initialization-expression &
[ , named-constant=initialization-expression ] ... )
```
规则和限制如下:
1. 不能为哑元、函数或公共块中的对象指定 `PARAMETER` 属性。
2. 命名常量必须有相应的初始化表达式,可以在类型声明语句或 `PARAMETER` 语句中指定。
3. 初始化表达式的值将根据内在赋值规则转换为命名常量的类型、类型参数和形状,该值必须与这种转换兼容。
4. 由 `PARAMETER` 语句定义的命名常量只有在后续类型声明语句确认其隐式类型时才能出现。
5. 命名数组常量必须在初始化之前或在同一语句中确定其数组属性。
6. 命名常量在定义之前不能被引用。
以下是命名常量声明的示例:
- **面向实体**:
```fortran
INTEGER,PARAMETER::STATES=50
INTEGER,PARAMETER::M=MOD(28,3),&
NUMBER_OF_SENATORS=2*STATES
character(1), parameter :: digits(0:9) = &
['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
```
- **面向属性**:
```fortran
INTEGER STATES, M, NUMBER_OF_SENATORS
PARAMETER (STATES=50)
PARAMETER (M=MOD(28,3), NUMBER_OF_SENATORS=2*STATES)
character*1 :: digits
dimension digits(0:9)
parameter (digits=['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'])
```
### 2.2 显式初始化
显式初始化指定非指针变量具有初始值,或指针初始时未关联。初始化只进行一次。在大多数实现中,初始化在程序加载时进行;另一种实现方式是在变量首次进入作用域时进行初始化。如果需要在每次进入时重新初始化变量,可以在过程的可执行代码开头使用赋值语句。
显式初始化可以在类型声明语句中通过在实体声明中包含初始化来指定。初始化有以下两种形式:
- `= initialization-expression`
- `=> null-initialization`
其中,空初始化是对无参数的内在函数 `NULL` 的引用,在几乎所有情况下,空初始化的形式为 `NULL()`,但也可以通过使用重命名的 `USE` 语句以不同的名称引用该内在函数。
显式初始化的规则和限制如下:
1. 带有初始化表达式的形式仅适用于非指针。
2. 带有空初始化的形式仅适用于指针。
3. 初始化表达式的值将根据内在赋值规则转换为被初始化实体的类型、类型参数和形状,该值必须与这种转换兼容。
`PARAMETER` 属性可以与初始化一起使用,但在这种情况下,对象是命名常量而不是显式初始化的变量。
显式初始化也可以在 `DATA`
0
0
复制全文
相关推荐










