ENDIFの後の文字No.05214
ももかず さん 04/04/23 17:08
 
こんにちは、ももかずです。

「#ifdef等でのコメント部分」について質問があります。
下記のようなケース1〜4があった場合、該当部分はどこになるのが
正しいのでしょうか?
VC6では、すべてコンパイルOKで、#if 0行から#endif行まで削除され
コンパイルされます。

ちなみに下記3、4は、#elseif行も#if 0内の扱いのように表示され、
その後1、2のような#endifが出現されてもさらに#if 0内のように
表示されてしまいます。

**************************************
// case 1
#if 0
 a=1;
#endif AAA

// case 2
#if 0
 a=1;
#endif/aaa

// case 3
#if 0
 a=1;
#endif?AAA

// case 4
#if 0
 a=1;
#endif;
**************************************

WinXP SP1、IE6 SP1、秀丸4.10b28、鶴亀3.55b4

[ ]
RE:05214 ENDIFの後の文字No.05215
秀丸担当 さん 04/04/23 18:08
 

>「#ifdef等でのコメント部分」について質問があります。
>下記のようなケース1〜4があった場合、該当部分はどこになるのが
>正しいのでしょうか?

おそらく正しいといえるのはコンパイルが通るほうだと思います。
例の場合でもカラーが正しく表示されるように修正させていただきます。

[ ]
RE:05215 ENDIFの後の文字No.05217
ももかず さん 04/04/23 23:19
 
秀丸担当さん、こんにちは。ももかずです。

>おそらく正しいといえるのはコンパイルが通るほうだと思います。
>例の場合でもカラーが正しく表示されるように修正させていただき
>ます。

ありがとうございます。

できれば、
  #if 0
    a=1;
  #endif/AAA
のような場合、「/AAA」の色も、変更してほしいかと思います。

まず無いとは思いますが、例えば、
  #if 0
    a=1;
  #endif
  b = 1;
  c = 1;
というようなコードだった場合に、誤って#endifの後の改行を消して、
  #if 0
    a=1;
  #endif b = 1;
  c = 1;
としてしまった場合、「b = 1;」は無視されてコンパイルされません。
「b = 1;」も「a = 1;」と同じ色になっていれば、わかりやすいかと
思うのですが...

よろしくお願いします。

[ ]
RE:05217 ENDIFの後の文字No.05224
秀丸担当 さん 04/04/26 16:51
 

>ありがとうございます。
>
>できれば、
>  #if 0
>    a=1;
>  #endif/AAA
>のような場合、「/AAA」の色も、変更してほしいかと思います。

少し勘違いしていました。/AAAなどは色を変更するべきではないかと思いました。
ですが、ネストしている場合など、判定がややこしくなってくるため、#endif以
降は色を付けないままとさせていただきたいです。
#endifの後に記号があって、それ以降の行もずっと色が変わったままになるのは
まずいですが、その行だけであれば、大きな問題ではないと思います。
申しわけありません。

[ ]
RE:05224 ENDIFの後の文字No.05234
アルビレオ さん 04/04/27 00:05
 
秀丸ユーザーのアルビレオです。

>少し勘違いしていました。/AAAなどは色を変更するべきではないかと思いました。
>ですが、ネストしている場合など、判定がややこしくなってくるため、#endif以
>降は色を付けないままとさせていただきたいです。
>#endifの後に記号があって、それ以降の行もずっと色が変わったままになるのは
>まずいですが、その行だけであれば、大きな問題ではないと思います。

私としては現状のままでもいいと思っているのですが、ちょっと誤解があるよう
なので補足しておきます。

#else や #endif ディレクティブには引数がありません。
そしてプリプロセッサディレクティブは行単位で扱われるため、結果的に #else
#endif の後ろにある文字は無視されることになります。
(Visual C++6.0とVisual C++.NETでしか確認していませんが、こんな部分を非互
換にするとは思えないのでANSI Cの仕様と考えていいと思います)

しかし、その Visual Studio の組み込みエディタでさえ #endif の後ろをコメ
ント色にするようなことはしていません。
だからネストなどを考える必要はないのですが、対応にするかどうかは作者の気
持ちしだいでょうね。

参考までに、
#else \
 コメント
のような書き方もコンパイラとしては許されています。

このあたりを試していて気がついたのですが、
// コメント\
 コメントの続き
といった書き方をすると、秀丸では2行目がコメント色になりませんね。
個人的にはどうでもいいと思っていますが一応報告しておきます。

[ ]
RE:05234 ENDIFの後の文字No.05237
秀丸担当 さん 04/04/27 18:20
 

>しかし、その Visual Studio の組み込みエディタでさえ #endif の後ろをコメ
>ント色にするようなことはしていません。
>だからネストなどを考える必要はないのですが、対応にするかどうかは作者の気
>持ちしだいでょうね。

補足ありがとうございます。
大きな問題ではないと思うので、Visual Studio のエディタのように、#endif
の後ろをコメント色にはしないようにさせていただきます。(β29での現状のま
ま)

>参考までに、
>#else \
> コメント
>のような書き方もコンパイラとしては許されています。

これも秀丸の都合なのですが、この書き方にも非対応です。
強調表示でも単一行しか想定していないです。複数行が幾重にも重なる判定にな
ってくると、難しいのもありますが、遅くなることも考えられるので、非対応と
させていただきます。


[ ]
RE:05217 ENDIFの後の文字No.05238
アルビレオ さん 04/04/27 22:02
 
秀丸ユーザーのアルビレオです。

>できれば、
>  #if 0
>    a=1;
>  #endif/AAA
>のような場合、「/AAA」の色も、変更してほしいかと思います。
>
>まず無いとは思いますが、例えば、
>  #if 0
>    a=1;
>  #endif
>  b = 1;
>  c = 1;
>というようなコードだった場合に、誤って#endifの後の改行を消して、
>  #if 0
>    a=1;
>  #endif b = 1;
>  c = 1;
>としてしまった場合、「b = 1;」は無視されてコンパイルされません。
>「b = 1;」も「a = 1;」と同じ色になっていれば、わかりやすいかと
>思うのですが...

先に書いたようにコンパイラでは #if 0 に限らず #else と #endif の後ろはす
べて無視されるので、強調表示の設定で

文字列: (?<=^[ \t]*#(endif|else))[^0-9A-ZA-z_].*$
大文字/小文字の区別: ON
単語の検索: OFF
正規表現: ON
表示方法: 強調表示1〜4 または 特に強調1〜2 のどれか

と設定し、設定した強調表示の色指定をコメントと同じにすれば同等のことは可
能です。(正規表現DLLはHmJre.dllを使う必要があります)

[ ]