#if等でのコメントアウトに関してNo.08951
EXZS さん 05/12/15 00:23
 
現状、#ifに関して定義した場合、#if〜#else〜#endif間をどちらか
をコメントアウトにする事は可能ですが、
#if〜#elif〜#elif〜#else〜#endifの様に#elif節を含んだ場合、
最後の#elif〜#else〜#endifまでしか有効範囲に入りません。
最初からの#ifを判定してコメントアウトにする事は難しいでしょうか?

[ ]
RE:08951 #if等でのコメントアウトに関しNo.08962
秀丸担当 さん 05/12/15 13:57
 

>現状、#ifに関して定義した場合、#if〜#else〜#endif間をどちらか
>をコメントアウトにする事は可能ですが、
>#if〜#elif〜#elif〜#else〜#endifの様に#elif節を含んだ場合、
>最後の#elif〜#else〜#endifまでしか有効範囲に入りません。
>最初からの#ifを判定してコメントアウトにする事は難しいでしょうか?

確認してみましたが、ちゃんと最初からの#ifを判定していると思うのですがど
うでしょうか。
具体的な式の内容と有効/無効を教えていただけると、こちらでも状況が分かる
かもしれません。

#if 0
111
#elif 0
222
#elif 1
333
#else
444
#endif

となっている場合、「333」の行だけ有効です。
3行目の「#elif 0」の行そのものが無効色になってしまっているため、判定さ
れていないと思ってしまうのかもしれません。
無効色にはなっていますが、一応判定はできていると思います。

[ ]
RE:08962 #if等でのコメントアウトに関しNo.08964
EXZS さん 05/12/15 14:31
 
>となっている場合、「333」の行だけ有効です。
>3行目の「#elif 0」の行そのものが無効色になってしまっているため、判定さ
>れていないと思ってしまうのかもしれません。
>無効色にはなっていますが、一応判定はできていると思います。

#ifで有効にする式に
 TEST_MODE == TEST3
を追加し、

#if TEST_MODE == TEST1
111
#elif TEST_MODE == TEST2
222
#elif TEST_MODE == TEST3
333
#else
444
#endif

と書くと111〜222がコメントアウトされません。
TEST_MODE == TEST2
を登録すると111がコメントアウトされません、という具合になります。
ひょっとして#ifで無効にする式にTEST1,TEST2も登録しないと
いけない仕様ですか?

[ ]
RE:08964 #if等でのコメントアウトに関しNo.08966
秀丸担当 さん 05/12/15 15:42
 

>と書くと111〜222がコメントアウトされません。
>TEST_MODE == TEST2
>を登録すると111がコメントアウトされません、という具合になります。
>ひょっとして#ifで無効にする式にTEST1,TEST2も登録しないと
>いけない仕様ですか?

なるほど。その指定であれば確かに最初111〜222は無効色になりません。
「#ifで無効にする式の内容」にも書いておかないとできないです。

この機能が作られた当初はたしか自動でどちらかになる仕様でしたが、要望によ
ってどちらにも指定しない場合はなにも色付けはしないという仕様になったのだ
と思います。

解決策として、たとえば式の内容に「//all」とかなんとか書いておくと自動で
全てを無効にしたり有効にしたりできるというのはどうでしょうか。

[ ]
RE:08966 #if等でのコメントアウトに関しNo.08967
EXZS さん 05/12/15 16:24
 
>この機能が作られた当初はたしか自動でどちらかになる仕様でしたが、要望によ
>ってどちらにも指定しない場合はなにも色付けはしないという仕様になったのだ
>と思います。
>
>解決策として、たとえば式の内容に「//all」とかなんとか書いておくと自動で
>全てを無効にしたり有効にしたりできるというのはどうでしょうか。

ソース行の方にですか?ソースファイルは変更できない場合もあるので
手をつけたくありません。
設定ダイアログの方に記述する方式で回避できるのであればそれでも
かまいません。

ともあれ、他の方も要望を出されているように、最終的には
UI周りを見直して頂いて、プロジェクト毎の評価式切り替えが
簡単になるなど使い勝手が良くなるとうれしいです。
まぁ見直し等は次のバージョンのネタに加えてくださるとうれしいです

[ ]
RE:08967 #if等でのコメントアウトに関しNo.08968
秀丸担当 さん 05/12/15 18:02
 

>ソース行の方にですか?ソースファイルは変更できない場合もあるので
>手をつけたくありません。
>設定ダイアログの方に記述する方式で回避できるのであればそれでも
>かまいません。
>
>ともあれ、他の方も要望を出されているように、最終的には
>UI周りを見直して頂いて、プロジェクト毎の評価式切り替えが
>簡単になるなど使い勝手が良くなるとうれしいです。
>まぁ見直し等は次のバージョンのネタに加えてくださるとうれしいです

ソースに書くのではなく、設定ダイアログの「#ifで無効にする式の内容」に
「//all」とか書くと…、ということです。
新たにチェックボックスを作ってもいいわけですがレジストリが増えるのも何な
ので。
コメント風にしてみたのは、現状で式の内容には何でも書けてしまいますが、C
言語を前提としているのでコメントを書くことは無いはずなので互換性が維持で
きるためです。

さらに「//filename.txt」とか書いておくとファイルにアタッチできるようにす
るとか。
そうすると、プロジェクトごとの切り替えも容易にできるようになるかもしれま
せん。
マクロでアタッチするファイルを変えることができるようにしたりするとか、同
一フォルダに定義を記述したファイルを置いておけば自動的に切り替わるとかも
考えられます。
心配なのは、起動時間が遅くなるかもしれないですが。

[ ]
RE:08968 #if等でのコメントアウトに関しNo.08976
EXZS さん 05/12/16 00:00
 
>ソースに書くのではなく、設定ダイアログの「#ifで無効にする式の内容」に
>「//all」とか書くと…、ということです。
>新たにチェックボックスを作ってもいいわけですがレジストリが増えるのも何な
>ので。
>コメント風にしてみたのは、現状で式の内容には何でも書けてしまいますが、C
>言語を前提としているのでコメントを書くことは無いはずなので互換性が維持で
>きるためです。
>
>さらに「//filename.txt」とか書いておくとファイルにアタッチできるようにす
>るとか。
>そうすると、プロジェクトごとの切り替えも容易にできるようになるかもしれま
>せん。
>マクロでアタッチするファイルを変えることができるようにしたりするとか、同
>一フォルダに定義を記述したファイルを置いておけば自動的に切り替わるとかも
>考えられます。
>心配なのは、起動時間が遅くなるかもしれないですが。

そこまで実現して頂けるなら嬉しいです。
無理のない方法で実装でかまいませんのでよろしくお願いします

[ ]