last updated:2023/12/27

Hidemaru Q and A

第III部〜秀丸マクロのいろはにほへと
 静的な変数について


静的な変数について

はじめに

通常の変数はマクロ実行時のみ参照できますが、「静的な変数」を使うとマクロ終了後も内容を保持できます。ただし保存できるのは文字列のみです。

「静的な変数」のサイズ(設定による)や個数(32767個)は上限があります。「共有フラグ」の設定により、他の秀丸エディタから参照可能です。「共有フラグ」によっては、起動中の全ての秀丸エディタを終了しないとメモリが解放されないので、使用しなくなった「静的な変数」は必ず削除したり、最低限の範囲で使用するようにしましょう。

setstaticvariable文

setstaticvariable 文 は指定した名前の「静的な変数」へ書き込みを行います。

setstaticvariable 変数名,文字列値,共有フラグ
変数名(文字列)

静的な変数の名前を指定します。大文字小文字は区別されません。
変数名と文字列値に "" を指定すると、指定された共有フラグの静的な変数を全て削除します。

//共有フラグ 0 に設定された静的な変数を全て削除する。
setstaticvariable "", "", 0;
文字列値(文字列)

変数に設定する内容
"" を指定すると、指定された静的な変数を削除します。

//共有フラグ 0 に設定された静的な変数 checkに値を保存する。
setstaticvariable "check", "hidemaru", 0;

//共有フラグ 0 に設定された静的な変数 checkを削除する。
setstaticvariable "check", "", 0;
共有フラグ(数値)
0
マクロを実行している秀丸エディタのみで共有する(他の秀丸エディタ上で実行するマクロからは参照できない)。同じウィンドウであっても「ファイルを閉じる」「閉じて開く」をすると消去されます。
1
実行している全ての秀丸エディタから参照できます。
2
「0」と同じですが、「ファイルを閉じる」「閉じて開く」でも内容は保持されます。
-1
通常の変数と同じ(実行している秀丸エディタのみ/共有なし/マクロ実行時のみ)。
// check.mac
setstaticvariable "check", currentmacrobasename, 0;
execmacro "check1.mac";
endmacro;

呼び出された側で「静的な変数」"check"を参照する。

// check1.mac
$a = getstaticvariable("check", 0);
message $a;
endmacro;

getstaticvariable関数

getstaticvariable 関数は、指定した名前の「静的な変数」から読み出しを行います。

$n = getstaticvariable(変数名,共有フラグ);
変数名(文字列)

静的な変数の名前を指定します。大文字小文字は区別されません。
変数名と文字列値に""を指定すると、記憶されている変数名を列挙して","でつなげた文字列を返します。

//共有フラグ 0 に設定された静的変数を全て削除する。
message getstaticvariable("", 0);
共有フラグ(数値)
0
マクロを実行している秀丸エディタのみで共有する(他の秀丸エディタ上で実行するマクロからは参照できない)。同じウィンドウであっても「ファイルを閉じる」「閉じて開く」をすると消去されます。
1
実行している全ての秀丸エディタから参照できます。
2
「0」と同じですが、「ファイルを閉じる」「閉じて開く」でも内容は保持されます。
-1
通常の変数と同じ(実行している秀丸エディタのみ、共有なし、マクロ実行時のみ)。

補足

名前が同じで、共有フラグが異なる場合

名前が同じでも共有フラグが異なる場合は、別の「静的な変数」と認識されます。

setstaticvariable "check", "hidemaru editor", 0;
setstaticvariable "check", "秀丸エディタ", 1;

//名前は大文字小文字は区別されない
$n1 = getstaticvariable("CHECK", 0);
$n2 = getstaticvariable("CHECK", 1);

message $n1 + "\n" + $n2;

//後始末
setstaticvariable "check", "", 0;
setstaticvariable "check", "", 1;
endmacro;

共有フラグの「-1」について

「静的な変数」は外部DLLから取得・設定が可能です。共有フラグ「-1」だと、通常の文字変数と同じなので、外部DLLとのやり取りで使用するには都合がいいです。


ページトップ 目次に戻る