dllfuncstr関数がセミコロンで終端していNo.08791
ohtorii さん 18/10/19 21:56
 
こんばんは

dllfuncstr関数が ; で終端していないとき、次行のコメントの有無で間違った動作
をします。

【問題のソースコード】
foo:
 $$parent = dllfuncstr(0, "", "")
 /*if(false){
 }*/
 return $$parent

・if文のコメントを外してif文を有効にする。
 →「式がおかしいです」とエラー表示される。(正常動作)

・if文のコメントをそのままにする。
 →「式がおかしいです」とエラー表示されない。(誤動作)


【再現するソースコード】
https://github.com/ohtorii/test/releases/tag/20181019_2


【環境】
秀丸エディタ 64bit ver 8.83
Windows10 64bit


秀丸マクロに対する私の理解が足りていないときは、
お騒がせしてしまい申し訳ないです😥

[ ]
RE:08791 dllfuncstr関数がセミコロンで終No.08792
秀丸担当 さん 18/10/22 09:27
 

こちらで試してみたところでは、returnがある場合はifが無くてもエラーが出ました
が、returnもifも無くそのまま[EOF]で終わる場合はエラーは出ませんでした。

このケースだけではないですが、セミコロンが無くても動いてしまうケースは確かに
あります。
例:
copy
message "a";

厳密に言うとエラーなのですが、いままで動いていたマクロがバージョンアップした
ら動かなくなったということになる可能性があります。

秀丸エディタのヘルプの、「目次」−「トラブル対処の例」のところに
「優先順位のまぎらわしい演算子についての警告」
「連続するキーワードについての警告 」
「文字列中の\についての警告」
というのがありますが、過去には警告でなかったものを、警告が出るようにしたら、
逆にバージョンアップしたらマクロが動かなくなったという不具合と認識されること
が何度かありました。
そのため、厳密にはエラーでも、影響が低そうなところはできるだけそのままにして
おきたいところです。
マクロを編集できない方にとってはわからないので、「マクロで問題のある文法の警
告を出さない」というオプションがあったりします。

[ ]
RE:08792 dllfuncstr関数がセミコロンで終No.08793
秀丸担当 さん 18/10/22 10:25
 

[その他]→[動作環境]→[トラブル対策]→[その他のトラブル対策]]→[マクロで問題
のある文法の警告を出さない]をONにしてみたら、言われている通り、returnがある
場合はエラーになりませんでした。
既に、他のケースでこういった互換性上の問題に遭遇し、このオプションをONにされ
ていたということだと思います。
仮にセミコロンのケースでエラーになるようにしたとしても、このオプションがONで
あれば、やっぱりエラーは出ないということになると思います。

[ ]
RE:08793 dllfuncstr関数がセミコロンで終No.08794
ohtorii さん 18/10/22 21:17
 
状況がわかりました。
確かに過去スクリプトの互換性は重要ですね。
丁寧に説明していただきありがとうございました(^_^)

[ ]