STATIC (IBM 延伸)

用途

STATIC 屬性指定變數具有靜態儲存類別; 亦即,在程式執行期間,該變數會保留在記憶體中,且其值會在對程序的呼叫之間保留。

語法

讀取語法圖跳過視覺化語法圖STATIC:: ,stat_variableinitial_value_list
stat_variable
是變數名稱或陣列宣告元,可指定 explicit_shape_spec_listdeferred_shape_spec_list
起始值
為緊接在前的名稱所指定的變數提供起始值。 起始設定如 資料中所述。

規則

如果 stat_variable 是結果變數,則它不得是字元類型或衍生類型。 虛擬引數、自動物件及稜角不得有 STATIC 屬性。 以 STATIC 屬性明確宣告的變數不能是一般區塊項目。

變數在相同的範圍設定單元中不得多次指定 STATIC 屬性。

區域變數具有自動的預設儲存類別。 請參閱 XL Fortran Compiler Reference 中的 -qsave 選項 ,以取得有關呼叫指令的預設值詳細資料。

宣告為 STATIC 的變數會在執行緒之間共用。 如果要對包含共用變數的應用程式進行安全執行緒作業,您必須使用鎖定來序列化對靜態資料的存取權,或使資料成為特定執行緒。 使資料成為執行緒特定的方法之一,是將靜態資料移至已宣告 THREADLOCALCOMMON 區塊中。 Pthreads 程式庫模組提供 mutexes ,可讓您使用鎖定來序列化對資料的存取權。 如需相關資訊,請參閱 XL Fortran Optimization and Programming Guide 中的 Pthreads library module CRITICAL 指引上的 lock_name 屬性也提供序列化資料存取權的能力。 如需相關資訊,請參閱 CRITICAL /END CRITICALTHREADLOCAL 指引可確保共用區塊位於每一個執行緒的本端。 如需相關資訊,請參閱 THREADLOCAL

表 1. 與 STATIC 屬性相容的屬性
ALLOCATABLE 1 指標 儲存
非同步 專用 目標
連續 2 受保護 1 暫時
維度 (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

相關資訊