静的記憶域を持っている、変数・オブジェクト・配列を、定義します。
構文:
Static symbol1 [ (array-dimensions) ] As DataType [ = expression] [, symbol2 [ (array-dimensions) ] As DataType [ = expression], ...]
または
Static As DataType symbol1 [ (array-dimensions) ] [ = expression] [, symbol2 [ (array-dimensions) ] [ = expression], ...]
または
Static Var symbol1 = expression [, symbol2 = expression, ...]
または
Sub|Function procedurename ( parameters ) [[ byref ] As DataType] Static
...
End Sub|Function
パラメタ:
symbol
変数や配列の識別名。
array-dimensions
下限値 To 上限値 [, ...]
または
Any [, Any...]
または、空
expression
定数式、または定数式の配列
記述:
変数・オブジェクト・配列に、
静的記憶域(記憶域クラス) を指定します。
プログラム開始時に割り当てられて、終了時に割当てを解除されます。
オブジェクトは、定義されるときに、一度、構築されます。そして、プログラム出口で破壊されます。
流れ制御命令 ループや手続きのように、反復的で再帰的なブロックでは、ブロックに対してローカルな、静的変数・オブジェクト・配列は、ブロックのすべてのインスタンスをとおして、同じ記憶装置を占めることを保証されます。
例えば、これら自身を(直接あるいは間接的に)呼ぶ手続きは、これらのローカル静的変数の、同じインスタンスを共有します。
静的変数は、定数値で初期化されるだけです:その初期値は、プログラムの開始時に、何かコードが実行される前に、設定されます。従って、この初期値は、プログラムの中の変数や関数に依存することはありません。
Static は、手続き定義レベル(宣言行レベルでは禁止)で使われるとき、すべての局所変数、オブジェクト、配列に対して
静的記憶(記憶域クラス) を指定します。一時変数と内部変数(明示的に宣言されていないオブジェクト)は除きます。
モジュール・レベル変数宣言のときにのみ、
Shared 修飾語を、
Static キーワードと共に、モジュール・レベル静的変数が、手続きの中で見えるようにするために、使うことができます。
ユーザ定義型(UDT) と共に使う時、
Static は、
静的メンバー手続き、または変数 を生成します。
例:
Sub f
'' 関数は、最初 0 で呼ばれます
Static timesCalled As Integer = 0
timesCalled += 1
Print "呼び出した回数: " & timesCalled
End Sub
'' f() の静的変数は、複数の手続呼び出しの間で
'' その値を保持します。
f()
f()
Sleep
とすると、以下のように出力されるでしょう:
方言差:
QBからの違い:
-
QuickBASIC で、Static キーワードを使って変数と配列を宣言できるのは、手続きと DEF FN ルーチンの範囲内だけです。
-
Static は、 QuickBASIC DEF FN ルーチンの中で、変数と配列が、ローカルで見えることを強制します。
FreeBASIC は、DEF FN ルーチンも、Static のこの使用法も、どちらもサポートしません。
参照: