#ifdef等での有効部分の色No.01647
Micky さん 03/06/12 22:28
 
まいどお世話になります。

#ifdef等での無効部分の色は怖くなる位(頼りすぎてしまいそう)
嬉しいのです。

ちょっとテストしてみたのですが、
#ifdef test
aaa
#else
bbb
#endif

この場合、test に対して、定義されているかどうかまでは判断しきれない為、
必ずFALSE として評価されているようですね。
(直前に #define test を追加しても変化無いので)
妥当な線と思います。が、もともとの狙いは「無効になっている部分の色を
変えて注意を促す」だと思っています。
つまり、本当に無効かどうかはこの時点では判断できないので、
#ifdef等での無効部分の色というのはちょっと疑問符です。
といって、定義されているかどうかの判断は出来ないと思うので、
こんなんはどうでしょう?

#ifdef等での有効部分の色 も設定できるようにする。

else の判断もされている事ですし、ちょっとの変更でできるのではないかと
勝手に思っています。一度ご検討の程よろしくお願いします。

[ ]
RE:01647 #ifdef等での有効部分の色No.01681
秀丸担当 さん 03/06/13 19:12
 

>#ifdef等での無効部分の色というのはちょっと疑問符です。
>といって、定義されているかどうかの判断は出来ないと思うので、
>こんなんはどうでしょう?
>
>#ifdef等での有効部分の色 も設定できるようにする。

#defineはヘッダーファイルでもコンパイルオプションでもできるので、判別す
ることはできません。
勘違いかもしれませんが、ファイルタイプ別の設定で#defineされているかどう
かを手動で設定できます。

[ ]
RE:01681 #ifdef等での有効部分の色No.01712
Micky さん 03/06/16 11:34
 
まいどお世話になります。

秀丸担当 さん write:

morさんの
turukame.3:01643| [要望]#ifdef のカラー化で指定しない#defineの場合
と到達点は同じかもしれません。(実際投稿しようか悩みました)

> >#ifdef等での有効部分の色 も設定できるようにする。

> 勘違いかもしれませんが、ファイルタイプ別の設定で#defineされているかどう
> かを手動で設定できます。
確かにここの設定でも切り替わってくれるので、基本的には事足りるのかも
知れません。

・ある時期を境(ex.7月〜とか)に変更が入るのがわかっている場合、
  #if _after
  何て事していたら、その部分にもある程度注意を払わないといけないし。
・複数人数で開発していて、他の人がいれたデバッグ用のブロックとかがあると
  defineされているかどうかわからないし。
  (わからないことにも問題はありますが)

そんなこんなで、いっそ有効部分も別色に出来たらと思った次第です。
秀丸担当さんが必要ないと思われれば、それはそれで結構です。

後、ついてですが、
ファイルタイプ別の設定で#define に _WINDOWS を入れても
うまく動いていないような気がするのですが。
#defne値の所に入力しても色は入力前と同じで、
再度ファイルタイプ別の設定をあけても空白になってしまいます。
予約語と言う扱いでしょうか?

[ ]
RE:01712 #ifdef等での有効部分の色No.01720
秀まるお さん 03/06/16 14:06
 
> ファイルタイプ別の設定で#define に _WINDOWS を入れても
> うまく動いていないような気がするのですが。

 こちらでは_WINDOWSで正常にカラー化動作しています。

 特に予約語のような特別処理はどこにも無いし、「_」がダメってことも無い
はずです。

 単純に「_WINDOWS」を指定した以外に、なにか複合的な条件が関係してるのか
もしれないです。その辺いろいろ試してみて欲しいです。

 例えばこちらで

#ifdef _WINDOWS
DFDSFDSF
#else
dfsdfsdfsf
#endif

というソースコードを書いて、_WINDOWを指定したり、_WINDOWSに直したりする
などしたら、カラー化が変化する様子が確認できました。

[ ]
RE:01720 #ifdef等での有効部分の色No.01734
Micky さん 03/06/16 17:55
 
まいどお世話になります。

秀まるお さん write:
>  単純に「_WINDOWS」を指定した以外に、なにか複合的な条件が関係してるのか
> もしれないです。その辺いろいろ試してみて欲しいです。
>
>  例えばこちらで
>
> #ifdef _WINDOWS
> DFDSFDSF
> #else
> dfsdfsdfsf
> #endif
>
> というソースコードを書いて、_WINDOWを指定したり、_WINDOWSに直したりする
> などしたら、カラー化が変化する様子が確認できました。
上のサンプルをコピーして、新規作成ウィンドウにペースト、
その後ファイルタイプをC言語ソースファイルに変更。
この時点で"DFDSFDSF"の行は紫になります。@
その後、その他→ファイルタイプ別の設定→カラー表示→モードで
プロパティ #indefのカラー表示にチェックが入っているのを確認し、
#ifdefで有効にする#define値に_WINDOWSをコピー/ペースト(ミスタイプ
防止の為)して、保存しないで更新。
これで色の変化はありません。(@と同じく"DFDSFDSF"の行が紫)
変だと思い、再度#ifdefで有効にする#define値をあけると
何も入っていません。

いろいろやってみたいのですが、何が関係しているのか想像がつきません。
ファイルタイプを共通にしてカラー表示にする言語をC/Java(選択の余地無し)
#define値指定して、OKおしても同じでした。

_WINDOWS
_windows

この2つは#ifdefで有効にする#define値 の所に入れてOKしても
もう一度見ると消えてなくなっています。
WINDOWS
はなくなりません。
WINDOWS が入っている状態で、_WINDOWSを次の行に入れてOKで
両方消えてしまいました。
なぜか消えちゃうようです。

Version 4.00β2
Windows 2000 SP3
Pen III 800MHz
512M RAM
ですが、関係無いですよね?
常駐ソフトとかアンチウィルスとか思いつくものは終わらしてみたのですが、
結果は思わしくありません。

キー割り当てとか、設定情報とか送ったらそちらで再現するでしょうか?

よろしくお願いします。

[ ]
RE:01734 #ifdef等での有効部分の色No.01737
秀まるお さん 03/06/16 18:44
 
 ということは、たぶん、「ファイルタイプ別の設定」のダイアログボックス上
での問題のようです。ということで、秀丸担当に回送します。

 再現方法が分からないのでなんですが…

 ちなみにですが、レジストリエディタを使ってとりあえず直す手はあります。
例えばC言語用のファイルの設定名を「C言語ソースファイル」としてるなら、

 HKEY_CURRENT_USER\Software\Hidemaruo\Hidemaru\Config\C言語ソースファイ


 というレジストリの、

 Defines

 というバイナリー値を手で書き換えればいいです。そこは「NULL文字区切りの
文字列、最後がNULL2文字」の形式になっているので、そういう形式で適当に書
き換えるといいかもしれません。

[ ]
RE:01737 #ifdef等での有効部分の色No.01746
Micky さん 03/06/16 22:18
 
秀まるお さん write:

>  ということは、たぶん、「ファイルタイプ別の設定」のダイアログボックス上
> での問題のようです。ということで、秀丸担当に回送します。

>  再現方法が分からないのでなんですが…
ヒントかもしれない事がありました。以下

>  HKEY_CURRENT_USER\Software\Hidemaruo\Hidemaru\Config\C言語ソースファイ
> ル
>
>  というレジストリの、
>
>  Defines
これがありません。
その代わりに(?)
[HKEY_CURRENT_USER\Software\Hidemaruo\Hidemaru\Config\テキストファイル]
だけに "Defines"=hex:00 が有りました。

って、前回は入っていた test とかも入らなくなってしまいました。
リブートした位なのにな・・・
余計深みにはまっているような気がします。

[ ]
RE:01746 #ifdef等での有効部分の色No.01747
アルビレオ さん 03/06/16 22:33
 
アルビレオです。

>>  HKEY_CURRENT_USER\Software\Hidemaruo\Hidemaru\Config\C言語ソースファイ
>> ル
>>
>>  というレジストリの、
>>
>>  Defines
>これがありません。
>その代わりに(?)
>[HKEY_CURRENT_USER\Software\Hidemaruo\Hidemaru\Config\テキストファイル]
>だけに "Defines"=hex:00 が有りました。

「保存しないで更新」だったら、「C言語ソースファイル」の設定として入って
いないのは当然ですよね。
「OK」と「保存しないで更新」で挙動が違うということかもしれません。

[ ]
RE:01747 #ifdef等での有効部分の色No.01771
Micky さん 03/06/17 17:23
 
まいどお世話になります。

秀丸をアンインストしてみました。
アプリケーションの追加と削除で削除し、フォルダごと削除、その後リブート
   →同じでした。(鶴亀はアンインストしていないので、なんか残ってるかも)


アルビレオ さん write:

> 「保存しないで更新」だったら、「C言語ソースファイル」の設定として入って
> いないのは当然ですよね。
> 「OK」と「保存しないで更新」で挙動が違うということかもしれません。
「保存しないで更新」は全体の設定には影響しないが、
そのウィンドウに対しては有効と思ってたんですが・・・

今、やってみたのですが、(上の再インスト後です)
ソースを開けていきなり「#ifdefで有効にする#define値」に aa を入力し、
「保存しないで更新」
→これは消えてなくなってました。

その続きで「.Cの設定」を(一時的な設定) から C言語ソースファイルを
選びなおし、「#ifdefで有効にする#define値」に aa を入力し、
「保存しないで更新」
→これは有効になりました。
この状態では、
  (一時的な設定) →「#ifdefで有効にする#define値」に aa が表示される。
  C言語ソースファイル → 「#ifdefで有効にする#define値」空欄

続けて bb とか入力しても、有効になってます。
続けて test と入力すると全て消えてしまいました。

現時点では、 test _windows がまるで入力をクリアする
予約語の様に動作します。

[ ]
RE:01771 #ifdef等での有効部分の色No.01801
アルビレオ さん 03/06/18 01:05
 
アルビレオです。

>> 「保存しないで更新」だったら、「C言語ソースファイル」の設定として入って
>> いないのは当然ですよね。
>> 「OK」と「保存しないで更新」で挙動が違うということかもしれません。
>「保存しないで更新」は全体の設定には影響しないが、
>そのウィンドウに対しては有効と思ってたんですが・・・

言葉足らずでした。
「そのウィンドウだけの一時的な設定なのでレジストリに記録されるはずがな
い」という意味です。

>今、やってみたのですが、(上の再インスト後です)
>ソースを開けていきなり「#ifdefで有効にする#define値」に aa を入力し、
>「保存しないで更新」
>→これは消えてなくなってました。
>
>その続きで「.Cの設定」を(一時的な設定) から C言語ソースファイルを
>選びなおし、「#ifdefで有効にする#define値」に aa を入力し、
>「保存しないで更新」
>→これは有効になりました。
>この状態では、
>  (一時的な設定) →「#ifdefで有効にする#define値」に aa が表示される。
>  C言語ソースファイル → 「#ifdefで有効にする#define値」空欄

これはひとつのウィンドウだけで操作しているのでしょうか?

こちらのβ2(win98SE)で試したところ、「C言語ソースファイル」側が空欄の状
態で一時的な設定のウィンドウから「ファイルタイプ別の設定」を開いて「.Cの
設定」を「C言語ソースファイル」の#define値に「一時的な設定」のキーワード
がコピーされてしまいました。

>続けて bb とか入力しても、有効になってます。
>続けて test と入力すると全て消えてしまいました。

これは「一時的な設定」に対して「保存しないで更新」をそれぞれ行なったと考
えればいいのでしょうか?
肝心な部分の操作がはっきり書かれていないのはちょっと…

>現時点では、 test _windows がまるで入力をクリアする
>予約語の様に動作します。

こちらでいくらか試してみましたが、キーワードによって動作が違うというよう
なことはまったく起こっていません。

ちょっとわかりにくかったかもしれませんが、テストしてもらいたかったのは
「保存しないで更新」を【使わないで】キーワードが消えたりするのかどうかと
いうことです。
まずはこの現象が「一時的な設定」に関係があるのかないのかを絞り込んだ方が
いいでしょう。

[ ]
RE:01801 #ifdef等での有効部分の色No.01824
秀丸担当 さん 03/06/18 17:06
 

#define値の設定について、いろいろやってみたのですが、状況を再現できませ
ん。
OKを押して、秀丸を一度終わらせて、もう一度開くとどうなるでしょうか。

[ ]
RE:01801 #ifdef等での有効部分の色No.01844
Micky さん 03/06/18 19:46
 
まいどお世話になります。

お付き合いありがとうございます。

アルビレオ さん write:

> 言葉足らずでした。
> 「そのウィンドウだけの一時的な設定なのでレジストリに記録されるはずがな
> い」という意味です。
なるほど、ごもっともです。

> これはひとつのウィンドウだけで操作しているのでしょうか?
はい、このへんは一つのウィンドウでテストしています。

> こちらのβ2(win98SE)で試したところ、「C言語ソースファイル」側が空欄の状
> 態で一時的な設定のウィンドウから「ファイルタイプ別の設定」を開いて「.Cの
> 設定」を「C言語ソースファイル」の#define値に「一時的な設定」のキーワード
> がコピーされてしまいました。
>
> >続けて bb とか入力しても、有効になってます。
> >続けて test と入力すると全て消えてしまいました。
>
> これは「一時的な設定」に対して「保存しないで更新」をそれぞれ行なったと考
> えればいいのでしょうか?
> 肝心な部分の操作がはっきり書かれていないのはちょっと…
このテストの時は全てokをおしてました。

> ちょっとわかりにくかったかもしれませんが、テストしてもらいたかったのは
> 「保存しないで更新」を【使わないで】キーワードが消えたりするのかどうかと
> いうことです。
OKおしても消えるのは同じです。

> まずはこの現象が「一時的な設定」に関係があるのかないのかを絞り込んだ方が
> いいでしょう。
関係無いと思います。

ちょっと長くなりますが、色々テストしてみました。

(R)はレジストリ(一度違うところを表示してから戻して確認しています。)
(P)ファイルタイプ別の設定のプロパティ
(OK)はOKボタン
.Cの設定は常にC言語ソースファイル
カラー表示にする言語も常にC言語/Java

C:\A.C ここから−−−−
#ifdef _windows
DFDSFDSF
#else
dfsdfsdfsf
#endif
#ifdef TEST
DFDSFDSF
#else
dfsdfsdfsf
#endif
#ifdef aa
DFDSFDSF
#else
dfsdfsdfsf
#endif
ここまで−−−−

まず、c:\A.Cオープン
(R)
[HKEY_CURRENT_USER\Software\Hidemaruo\Hidemaru\Config\C言語ソースファイ
ル]
"Defines"=hex:00

(P) に aa を入力(OK)
(R) "Defines"=hex:61,61,00,00

(P) に TEST を追加入力(OK)
(R) "Defines" 項目なし

(P) に aa を入力(OK)
(R) "Defines"=hex:61,61,00,00

(P) に TES を追加入力(OK)
(R) "Defines"=hex:61,61,00,54,45,53,00,00

(P) に TEST1 を追加入力(OK)
(R) "Defines"=hex:61,61,00,54,45,53,00,54,45,53,54,31,00,00

(P) に TEST1 を追加入力(OK)
(R) "Defines"=hex:61,61,00,54,45,53,00,54,45,53,54,31,00,00

(P) に TEST を追加入力(OK)
(R) "Defines" 項目なし

(P) に test を追加入力(OK)
(R) "Defines" 項目なし

(P) に _windows を追加入力(OK)
(R) "Defines" 項目なし

(P) に TEST1 を追加入力(OK)
(R) "Defines"=hex:54,45,53,54,31,00,00
レジストリを "Defines"=hex:54,45,53,54,00,00 に手で変更
(P) は まだTEST1のままですが、一度常駐も含めて秀丸を終了します。
(鶴亀は立ち上がったままです。)

でc:\A.Cオープン
(R) "Defines"=hex:54,45,53,54,00,00
(P) は TEST が入っています。ここで(OK)
(R) "Defines" 項目なし

以上の実験から、
1.大文字/小文字は関係無い。
2.OKを押した時点で TEST が有ればレジストリから"Defines" 項目が
  削除される。
3.test と _windows の2つの文字列で現象が発生。
  似たような文字列では発生しない。


こんなテストもしてみました。
別のPC(Windows 2000 SP3, IE5.0現象発生機はWin2000SP3,IE6)でどうか?
1.別ユーザでは発生しません。
2.同じユーザ(移動プロファイルをサーバに保管しているので、
  かなり同じだと思います)→発生しません。

ついでなんで、同じPCで別ユーザも試してみました。
結果は発生しました。
つまり・・・このPCが悪いようです。あきらめた方がよいのかな。

[ ]
RE:01844 #ifdef等での有効部分の色No.01868
秀丸担当 さん 03/06/19 19:11
 

>ちょっと長くなりますが、色々テストしてみました。

詳細にわたってテストありがとうございます。
なぜTESTと_windowsなんでしょう。謎ですね。
4の倍数の文字数だといけないとか。

処理方法を変えて対策しようかと思います。

[ ]
RE:01868 #ifdef等での有効部分の色No.01876
Micky さん 03/06/19 21:44
 
まいどお世話になります。

秀丸担当 さん write:

> 4の倍数の文字数だといけないとか。
これ、正解かも。
1234 とか、 0000 も aaaa も 12345678 も
みーんな消えちゃいました。
なんででしょう?

> 処理方法を変えて対策しようかと思います。
私一人の為に、お手数をおかけします。

[ ]
RE:01868 #ifdef等での有効部分の色No.01885
Micky さん 03/06/20 18:42
 
秀丸担当 さん write:

> なぜTESTと_windowsなんでしょう。謎ですね。
> 4の倍数の文字数だといけないとか。
>
> 処理方法を変えて対策しようかと思います。
β4で対策OKの様です。
1234 とか、 0000 も aaaa も 12345678 も
みーんな消えなくなりました。
ありがとうございます。

やはり4の倍数が悪さしていたんでしょうか?

[ ]
RE:01885 #ifdef等での有効部分の色No.01929
秀丸担当 さん 03/06/23 18:33
 

>やはり4の倍数が悪さしていたんでしょうか?

こちらでは再現できていないので、なぜ4の倍数なのかは謎ですが、違う方法で
やることによって回避できたようです。

[ ]