秀丸マクロ:サブルーチンの作り方

スポンサーリンク

秀丸マクロでサブルーチンをつくる方法を紹介します。 最初にシンプルな基本形を紹介し、戻り値、引数(パラメータ)、 ローカル変数の順番で説明します。

他のプログラミング言語と比べて独特な書き方をする部分もあるので注意が必要です。

秀丸マクロ、サブルーチンの基本形

秀丸マクロサンプルコード


// サブルーチン呼び出し
call ラベル名;

endmacro;

// ------------------------
// サブルーチン
ラベル名:

	// 処理を記述

	// 戻る
	return;

秀丸マクロのサブルーチンにつける名前を「ラベル名」と言い、 記述する場合はラベル名の後に:(コロン)を付けます。 サブルーチンの処理が終わって戻る場合は「return;」で戻ります。

サブルーチンを呼び出す側では「call ラベル名;」で呼び出します。
上記のプログラムの場合、 サブルーチンの前に「endmacro;」と記述してマクロを終了しています。 もし「endmacro;」がない場合は、再びサブルーチンが実行されて下図のエラーが発生しますから、 サブルーチンの前には「endmacro;」を記述してください。

秀丸マクロ サブルーチン

サブルーチンの戻り値

秀丸マクロのサブルーチンでは、戻り値を1つだけ返すことができます。
returnの後に指定した値を戻します。 呼び出し側で戻り値を使用するには(文字列型の場合)「$$return」、 (数値型の場合)「##return」で使用できます。

呼び出し元とサブルーチン側で戻り値の型を合わせておく必要があります。 例えば、「return 数値型;」と記述した戻り値を「$$return」で使用すると、 エラーが発生します。

戻り値が文字列型の場合

「$$return」で取得できます。


call test;

message $$return; // hello

endmacro;

// サブルーチン
test:

	$str = "hello";
	return $str;

戻り値が数値型の場合

「##return」で取得できます。


call test;

message str(##return);  // 1

endmacro;

// サブルーチン
test:

	#num = 1;
	return #num;

サブルーチンの引数(パラメータ)

秀丸マクロのサブルーチンで引数を指定する場合は、 ラベル名の後に記述します。 複数ある場合はカンマで区切ってください。 引数の上限値は9個です。

秀丸マクロサンプルコード


// 引数を3つ指定
call test "a", "b", 1;

endmacro;

// サブルーチン
test:
	
	// 引数を取得
	message $$1;       // a
	message $$2;       // b
	message str(##3);  // 1
	
	return $$str;

サブルーチン側で受け取った引数を使用する場合は、 「$$番号」(文字列型)や「##番号」(数値型)のように記述します。 上のサンプルコードでは、1番目、2番目の引数が文字列型、 3番目の引数が数値型なので「$$1」「$$2」「##3」で使用できます。

サブルーチンのローカル変数

サブルーチンでローカル変数を使用する場合は、 「$$変数名」(文字列型)、「##変数名」(数値型)と記述します。

呼び出し側とサブルーチン側で変数名がかぶっている場合、 「$$」と「$」や、「##」と「#」の付け間違いがバグの原因となることもあるので 注意してください。

秀丸マクロサンプルコード


$str = "abc";
call test;  // サブルーチン 呼び出し

message $str;    // efg  書き換えられている

endmacro;

// サブルーチン
test:
	
	// ローカル変数
	$$str = "xyz";
	
	message $str;   // abc
	message $$str;  // xyz
	
	// メイン側の変数の値を書き換える
	$str = "efg";
	
	return;