[ 新規に投稿する ]

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 [ コメントを投稿する ]
  状況がわかりました。
確かに過去スクリプトの互換性は重要ですね。
丁寧に説明していただきありがとうございました(^_^)
[ ]

[ 新規に投稿する ]