STATIC(IBM 扩展)

用途

STATIC 属性指定变量具有静态存储类; 即,变量在程序持续时间内保留在内存中,并且其值在对过程的调用之间保留。

语法

读取语法图跳过可视语法图STATIC:: ,stat_variableinitial_value_list
stat_variable
是可指定 explicit_shape_spec_listdeferred_shape_spec_list 的变量名或数组声明符。
initial_value
为紧接在前面的名称指定的变量提供初始值。 如 DATA中所述进行初始化。

规则

如果 stat_variable 是结果变量,那么它不能是类型字符或派生类型。 哑元参数,自动对象和专用对象不得具有 STATIC 属性。 使用 STATIC 属性显式声明的变量不能是公共块项。

变量不得在同一作用域限定单元中多次指定 STATIC 属性。

局部变量具有自动的缺省存储类。 请参阅 IBM® Open XL Fortran Compiler Reference 中的 -qsave 选项 ,以获取有关调用命令的缺省设置的详细信息。

声明为 STATIC 的变量在线程之间共享。 要线程安全包含共享变量的应用程序,您必须使用锁定对静态数据进行序列化访问,或者使线程特定数据。 使数据线程特定的一种方法是将静态数据移动到已声明的 COMMON 块中 THREADLOCAL Pthreads 库模块提供了互斥对象,以允许您使用锁定来序列化对数据的访问。

表 1. 与 STATIC 属性兼容的属性
ALLOCATABLE 1 POINTER SAVE
ASYNCHRONOUS PRIVATE TARGET
连续 2 受保护 1 VOLATILE
DIMENSION    
注意:
  • 1 Fortran 2003
  • 2 Fortran 2008

示例

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

相关信息