優先順位のまぎらわしい演算子についての警告(Ver9.35対応版)
とりあえず警告メッセージを出さなくする方法について
[その他]→[動作環境...]の「トラブル対策」ページ中の「その他のトラブル対策...」を押して、そこにある
マクロで問題のある文法の警告を出さない
のオプションをONにしてください。それでこの警告を出さなくすることが出来ます。よそ様の作成されたマクロを使うだけでしたら、とりあえずこの方法で回避お願いします。
詳しい説明
秀丸マクロの演算子の優先順位で、「!」と「||」と「&&」は、残念ながら同一の優先順位になってしまってます。なので、C言語等と同じような感じでこれらの演算子を並べて表記すると、期待された結果が得られないことが多いです。
例えば、
#a = 0;
#b = 0;
if( #a || !#b ) {
message "True";
}
が「数値が指定されるべき所に数値以外のものが指定されています」のエラーになってしまったり、
#a = 1;
#b = 1;
if( !#a || #b ) {
message "True";
}
endmacro;
の条件式が期待通りに解釈されなかったりします。
さらには、&&と||を混ぜたような、例えば
#a = 1;
#b = 0;
#c = 0;
if( #a || #b && #c ) {
message "true";
}
のような式についてもC言語のようには解釈されず、期待通りに動かないことが多いです。
これらの問題を回避するためには、「! xxx」のような式の部分を必ず「(!xxx)」のようにカッコで囲ってやる必要があります。例えば上記マクロの例では、
if( #a || (!#b) )
if( (!#a) || #b )
のように記述する必要があります。&&と||を並べる時は、例えば
if( #a || ( #b && #c ) ) {
message "true";
}
のように、どちらか優先したい方をカッコで囲んでやる必要があります。
カッコで囲まずに式を書くと、警告メッセージが出てしまいます。
カッコで囲まずに式を書いてしまってあっても警告メッセージを出さなくしたい場合は、[その他]→[動作環境...]の「トラブル対策」ページの中にある「その他のトラブル対策...」の先にある
マクロで問題のある文法の警告を出さない
のオプションをONにしてください。これでとりあえず、マクロの手直しをしなくても警告無しでマクロ実行出来るようになります。