execmacro で可変引数No.08809
IKKI さん 15/11/07 00:22
 
秀丸担当さん、こんにちは。

execmacro 文で、menuarray のように可変個の引数を与えられるようにすることは難
しいでしょうか。

// 理想.mac
execmacro2 $$1, $argv, #argc;

// 現実.mac
if      (#argc ==  0) execmacro $$1;
else if (#argc ==  1) execmacro $$1, $argv[0];
else if (#argc ==  2) execmacro $$1, $argv[0], $argv[1];
else if (#argc ==  3) execmacro $$1, $argv[0], $argv[1], $argv[2];
else if (#argc ==  4) execmacro $$1, $argv[0], $argv[1], $argv[2], $argv[3];
else if (#argc ==  5) execmacro $$1, $argv[0], $argv[1], $argv[2], $argv[3],
 $argv[4];
else if (#argc ==  6) execmacro $$1, $argv[0], $argv[1], $argv[2], $argv[3],
 $argv[4], $argv[5];
else if (#argc ==  7) execmacro $$1, $argv[0], $argv[1], $argv[2], $argv[3],
 $argv[4], $argv[5], $argv[6];
else if (#argc ==  8) execmacro $$1, $argv[0], $argv[1], $argv[2], $argv[3],
 $argv[4], $argv[5], $argv[6], $argv[7];
else if (#argc ==  9) execmacro $$1, $argv[0], $argv[1], $argv[2], $argv[3],
 $argv[4], $argv[5], $argv[6], $argv[7], $argv[8];
else if (#argc == 10) execmacro $$1, $argv[0], $argv[1], $argv[2], $argv[3],
 $argv[4], $argv[5], $argv[6], $argv[7], $argv[8], $argv[9];
else if (#argc == 11) execmacro $$1, $argv[0], $argv[1], $argv[2], $argv[3],
 $argv[4], $argv[5], $argv[6], $argv[7], $argv[8], $argv[9], $argv[10];
else if (#argc == 12) execmacro $$1, $argv[0], $argv[1], $argv[2], $argv[3],
 $argv[4], $argv[5], $argv[6], $argv[7], $argv[8], $argv[9], $argv[10], $arg
v[11];
else if (#argc == 13) execmacro $$1, $argv[0], $argv[1], $argv[2], $argv[3],
 $argv[4], $argv[5], $argv[6], $argv[7], $argv[8], $argv[9], $argv[10], $arg
v[11], $argv[12];
else if (#argc == 14) execmacro $$1, $argv[0], $argv[1], $argv[2], $argv[3],
 $argv[4], $argv[5], $argv[6], $argv[7], $argv[8], $argv[9], $argv[10], $arg
v[11], $argv[12], $argv[13];
else if (#argc == 15) execmacro $$1, $argv[0], $argv[1], $argv[2], $argv[3],
 $argv[4], $argv[5], $argv[6], $argv[7], $argv[8], $argv[9], $argv[10], $arg
v[11], $argv[12], $argv[13], $argv[14];
else if (#argc == 16) execmacro $$1, $argv[0], $argv[1], $argv[2], $argv[3],
 $argv[4], $argv[5], $argv[6], $argv[7], $argv[8], $argv[9], $argv[10], $arg
v[11], $argv[12], $argv[13], $argv[14], $argv[15];
else if (#argc == 17) execmacro $$1, $argv[0], $argv[1], $argv[2], $argv[3],
 $argv[4], $argv[5], $argv[6], $argv[7], $argv[8], $argv[9], $argv[10], $arg
v[11], $argv[12], $argv[13], $argv[14], $argv[15], $argv[16];
else if (#argc == 18) execmacro $$1, $argv[0], $argv[1], $argv[2], $argv[3],
 $argv[4], $argv[5], $argv[6], $argv[7], $argv[8], $argv[9], $argv[10], $arg
v[11], $argv[12], $argv[13], $argv[14], $argv[15], $argv[16], $argv[17];
else if (#argc == 19) execmacro $$1, $argv[0], $argv[1], $argv[2], $argv[3],
 $argv[4], $argv[5], $argv[6], $argv[7], $argv[8], $argv[9], $argv[10], $arg
v[11], $argv[12], $argv[13], $argv[14], $argv[15], $argv[16], $argv[17], $ar
gv[18];
else if (#argc == 20) execmacro $$1, $argv[0], $argv[1], $argv[2], $argv[3],
 $argv[4], $argv[5], $argv[6], $argv[7], $argv[8], $argv[9], $argv[10], $arg
v[11], $argv[12], $argv[13], $argv[14], $argv[15], $argv[16], $argv[17], $ar
gv[18], $argv[19];
else if (#argc == 21) execmacro $$1, $argv[0], $argv[1], $argv[2], $argv[3],
 $argv[4], $argv[5], $argv[6], $argv[7], $argv[8], $argv[9], $argv[10], $arg
v[11], $argv[12], $argv[13], $argv[14], $argv[15], $argv[16], $argv[17], $ar
gv[18], $argv[19], $argv[20];
else if (#argc == 22) execmacro $$1, $argv[0], $argv[1], $argv[2], $argv[3],
 $argv[4], $argv[5], $argv[6], $argv[7], $argv[8], $argv[9], $argv[10], $arg
v[11], $argv[12], $argv[13], $argv[14], $argv[15], $argv[16], $argv[17], $ar
gv[18], $argv[19], $argv[20], $argv[21];
else if (#argc == 23) execmacro $$1, $argv[0], $argv[1], $argv[2], $argv[3],
 $argv[4], $argv[5], $argv[6], $argv[7], $argv[8], $argv[9], $argv[10], $arg
v[11], $argv[12], $argv[13], $argv[14], $argv[15], $argv[16], $argv[17], $ar
gv[18], $argv[19], $argv[20], $argv[21], $argv[22];
else if (#argc == 24) execmacro $$1, $argv[0], $argv[1], $argv[2], $argv[3],
 $argv[4], $argv[5], $argv[6], $argv[7], $argv[8], $argv[9], $argv[10], $arg
v[11], $argv[12], $argv[13], $argv[14], $argv[15], $argv[16], $argv[17], $ar
gv[18], $argv[19], $argv[20], $argv[21], $argv[22], $argv[23];
else if (#argc == 25) execmacro $$1, $argv[0], $argv[1], $argv[2], $argv[3],
 $argv[4], $argv[5], $argv[6], $argv[7], $argv[8], $argv[9], $argv[10], $arg
v[11], $argv[12], $argv[13], $argv[14], $argv[15], $argv[16], $argv[17], $ar
gv[18], $argv[19], $argv[20], $argv[21], $argv[22], $argv[23], $argv[24];
else if (#argc == 26) execmacro $$1, $argv[0], $argv[1], $argv[2], $argv[3],
 $argv[4], $argv[5], $argv[6], $argv[7], $argv[8], $argv[9], $argv[10], $arg
v[11], $argv[12], $argv[13], $argv[14], $argv[15], $argv[16], $argv[17], $ar
gv[18], $argv[19], $argv[20], $argv[21], $argv[22], $argv[23], $argv[24], $a
rgv[25];
else if (#argc == 27) execmacro $$1, $argv[0], $argv[1], $argv[2], $argv[3],
 $argv[4], $argv[5], $argv[6], $argv[7], $argv[8], $argv[9], $argv[10], $arg
v[11], $argv[12], $argv[13], $argv[14], $argv[15], $argv[16], $argv[17], $ar
gv[18], $argv[19], $argv[20], $argv[21], $argv[22], $argv[23], $argv[24], $a
rgv[25], $argv[26];
else if (#argc == 28) execmacro $$1, $argv[0], $argv[1], $argv[2], $argv[3],
 $argv[4], $argv[5], $argv[6], $argv[7], $argv[8], $argv[9], $argv[10], $arg
v[11], $argv[12], $argv[13], $argv[14], $argv[15], $argv[16], $argv[17], $ar
gv[18], $argv[19], $argv[20], $argv[21], $argv[22], $argv[23], $argv[24], $a
rgv[25], $argv[26], $argv[27];
else if (#argc == 29) execmacro $$1, $argv[0], $argv[1], $argv[2], $argv[3],
 $argv[4], $argv[5], $argv[6], $argv[7], $argv[8], $argv[9], $argv[10], $arg
v[11], $argv[12], $argv[13], $argv[14], $argv[15], $argv[16], $argv[17], $ar
gv[18], $argv[19], $argv[20], $argv[21], $argv[22], $argv[23], $argv[24], $a
rgv[25], $argv[26], $argv[27], $argv[28];
else if (#argc == 30) execmacro $$1, $argv[0], $argv[1], $argv[2], $argv[3],
 $argv[4], $argv[5], $argv[6], $argv[7], $argv[8], $argv[9], $argv[10], $arg
v[11], $argv[12], $argv[13], $argv[14], $argv[15], $argv[16], $argv[17], $ar
gv[18], $argv[19], $argv[20], $argv[21], $argv[22], $argv[23], $argv[24], $a
rgv[25], $argv[26], $argv[27], $argv[28], $argv[29];
else if (#argc == 31) execmacro $$1, $argv[0], $argv[1], $argv[2], $argv[3],
 $argv[4], $argv[5], $argv[6], $argv[7], $argv[8], $argv[9], $argv[10], $arg
v[11], $argv[12], $argv[13], $argv[14], $argv[15], $argv[16], $argv[17], $ar
gv[18], $argv[19], $argv[20], $argv[21], $argv[22], $argv[23], $argv[24], $a
rgv[25], $argv[26], $argv[27], $argv[28], $argv[29], $argv[30];

ご検討いただければ幸いです。

[ ]
RE:08809 execmacro で可変引数No.08814
秀丸担当 さん 15/11/09 11:08
 

execmacroをmenuarrayのように配列にすることは、不可能ではないと思います。
同じ文ではできないので、やるとしたらexecmacroarrayとするか、例にあるよう
にexecmacro2になると思います。
できたらいいということでご意見参考にさせていただきます。

[ ]