ラベルについてNo.09771
たけとり さん 18/09/13 23:09
 
 お世話になります。

 標記についてですが、マクロヘルプの「goto文とラベル」項目では、
> ラベルは、適当な英数字が指定できます。
と記載がありますが、「call _LABEL」のように、アンダースコアが含まれていても、
特にエラーが起きないようです。
 これは、そのうち元に戻されますでしょうか。
 できましたら、このまま(ラベル名にアンダースコアも使えるよう)にしていただけ
たら、ありがたいです。


 また、ラベル名を間違えてcall/goto分を呼び出したときに、以下のようなエラー
ダイアログが表示されます。
---------------------------
エラー
---------------------------
goto/callで飛び先が見つかりません。飛び先: IFA
---------------------------
OK  
---------------------------

 しかし、以下のようにエラー表示を消す処理を入れても、当該ダイアログのタイト
ルが「エラー」であるにもかかわらず、当該ダイアログが表示されてしまいます。
 できましたら、ラベル名間違いの時も、seterrormodeかdisableerrormsgで、この
ダイアログを表示しないでもらう
(そして、できましたら、resultがfalseになってもらう)
ようにしていただけたら、と思います。

 よろしくお願いします。

call IF;
message str(result);
seterrormode 4, 0;
disableerrormsg;
call IFA;
message str(result);
endmacro;

IF:
return;

[ ]
RE:09771 ラベルについてNo.09773
秀丸担当 さん 18/09/14 09:22
 

ラベル名は、アンダーバーも書いていいことになっていました。
この仕様が無くなるということは無いです。
ヘルプのほうを修正させていただきます。

ラベル名の間違いによるエラーは、マクロの書き方が間違っているというような文法
エラーに近いエラーで、disableerrormsgをしても出なくなるということは無いです。
ヘルプには「エラー」というタイトルのメッセージボックス全てと書いてありますが、
必ずしもそういうわけではないので、ヘルプのほうを修正させていただきます。

[ ]
RE:09773 ラベルについてNo.09774
たけとり さん 18/09/14 20:40
 

>ラベル名の間違いによるエラーは、マクロの書き方が間違っているというような文
>法エラーに近いエラーで、disableerrormsgをしても出なくなるということは無いで
>す。

 実は、以下のように、switch〜case代わりに使おうとしているところがありまして、
ラベル名を文字列変数で呼び出す「call $x」みたいな使い方だと、必ずしも書き方
の間違いではないのかな、と思いまして投稿させていただきました。

〜〜〜
$func = input("何か入力してください。");
call $func;
if(!result) message "正しい値を入力ください。"
endmacro;

call A:
return $varA;

call B:
return $varB;
〜〜〜


 いずれにしましても、ラベル名にアンダースコアを含めることが可能という件と含
めまして、了解です。


[ ]
RE:09774 ラベルについてNo.09776
秀丸担当 さん 18/09/18 08:27
 

確かにcall $x;のように変数名で呼ぶ場合は、エラーを表示させないようにできたら、
意味はあると思います。
以前は変数名で呼ぶ方法は無くて、後から追加されたため、もともとの動作に合わせ
てそうなっていました。
disableerrormsgだと互換性上問題になるかもしれないので、seterrormodeで抑制す
る方法を検討したいと思います。

[ ]
RE:09776 ラベルについてNo.09783
たけとり さん 18/09/22 14:05
 
β5で以下のようなマクロで、所望の動作をすることを確認しました。
また、ヘルプの追記も併せて、ありがとうございました。

$a = "b";
seterrormode 5, 0;
call $a;
if(getresultex(17)) message "サブルーチンがありません。";
endmacro;

a:
return;


 ところで、単なる興味本位の質問で恐縮ですが…。
 マクロヘルプの「変数の使い方」項目には
>変数名には30文字程度までの適当な英数字
と記載がありますが、ラベル名についてはこの辺の記載がないようです。
 手元で試したところ、ラベル名長が40文字以上だとgetresultex(17)がtrueを返し
ました。
 ラベル名は40文字ぐらいまで…という理解でいいでしょうか?
(なお、39文字でも十分長いと思っています。)


 さらに今気づいたのですが、変数名もアンダーバーが使えます…よね?

 よろしくお願いします。

[ ]