STATIC(IBM 扩展)
用途
STATIC 属性指定变量具有静态存储类; 即,变量在程序持续时间内保留在内存中,并且其值在对过程的调用之间保留。
语法
- stat_variable
- 是可指定 explicit_shape_spec_list 或 deferred_shape_spec_list 的变量名或数组声明符。
- initial_value
- 为紧接在前面的名称指定的变量提供初始值。 如 DATA中所述进行初始化。
规则
如果 stat_variable 是结果变量,那么它不能是类型字符或派生类型。 哑元参数,自动对象和专用对象不得具有 STATIC 属性。 使用 STATIC 属性显式声明的变量不能是公共块项。
变量不得在同一作用域限定单元中多次指定 STATIC 属性。
局部变量具有自动的缺省存储类。 请参阅 IBM® Open XL Fortran Compiler Reference 中的 -qsave 选项 ,以获取有关调用命令的缺省设置的详细信息。
声明为 STATIC 的变量在线程之间共享。 要线程安全包含共享变量的应用程序,您必须使用锁定对静态数据进行序列化访问,或者使线程特定数据。 使数据线程特定的一种方法是将静态数据移动到已声明的 COMMON 块中 THREADLOCAL。 Pthreads 库模块提供了互斥对象,以允许您使用锁定来序列化对数据的访问。
| ALLOCATABLE 1 | POINTER | SAVE |
| ASYNCHRONOUS | PRIVATE | TARGET |
| 连续 2 | 受保护 1 | VOLATILE |
| DIMENSION | ||
注意:
|
||
示例
LOGICAL :: CALLED=.FALSE.
CALL SUB(CALLED)
CALLED=.TRUE.
CALL SUB(CALLED)
CONTAINS
SUBROUTINE SUB(CALLED)
INTEGER, STATIC :: J
LOGICAL :: CALLED
IF (CALLED.EQV..FALSE.) THEN
J=2
ELSE
J=J+1
ENDIF
PRINT *, J ! Output on first call is 2
! Output on second call is 3
END SUBROUTINE
END
