中本です。

この問題については、先ほど i76970 として登録しておきました。

On Thu, 03 May 2007 02:56:42 +0900
tora - Takamichi Akiyama <[EMAIL PROTECTED]> wrote:

> Takashi Nakamoto wrote:
> > i36782 にあるToraさんの報告:
> > 
> > Japanese Microsoft Visual Stduio .NET comiplers misinterpret ...
> > 
> > という記述を見る限りは「日本語版」のコンパイラのみの問題ということなん
> > でしょうが、頻発するようであればなんらかの処置があった方がよいでしょう
> > ね。
> 
> 私は、米国在住中に個人的に購入した英語版の同コンパイラを使っているので、
> 実は今回問題となっているようなエラーを見たことが無いのです。ごめんなさい。
> # 日本においても、amazon.com などで英語版を購入できるよ。
> 
> 上記 i36782 の登録においては、
> 
> #pragma setlocale("japanese")
> 
> という文をわざと追加し、当該のエラーを発生させてみたりしたわけです。

なるほど。私の方でもいろいろ試してみたのですが、結局
#pragma setlocale("C")
は全く効きませんでした。ちなみに、私は今のところ Visual C++ 2005
Express Edition の日本語版を使っているのですが、これを英語版にしたほう
がいいのでしょうか...

また、いろいろググったのですが、同様の問題を見つけることができませんで
した。
http://support.microsoft.com/kb/912790/ja
なんかが関連しているのでしょうが、結局何が原因なのかが分かりません。と
りあえず、非ASCII文字を文字リテラルや文字列リテラルには使わない方が無
難ということで、i76970にはそれらの文字をエスケープしたものに置き換えた
パッチを添付しています。

> http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/vclib/html/_CRT_Language_Strings.asp
> 
> 韓国語版や中国語版の同コンパイラにおいても、同じような問題が発生している
> のかもしれません。が、私は実際のところは知りませんです。
> 
> 
> > 例えば、ビルド対するシステム要件のところに、「ローカライズされたコンパイ
> > ラの場合はコンパイルできないかもしれない」という簡単な記述を追加してお
> > くとか、あるいはマルチバイト文字を含むソースコードには必ず #pragma... 
> > を書くというコーディング規約を作るとか。
> 
> そうですね。コーディング既約を作るといいのかもしれませんです。
> 
> 
> ところで今回問題となっているのは「マルチバイト文字」ではありませんです。
> 1バイトの文字です。
> 
> Character set ISO-8859-1 の 0x80 から 0xff に配置されている、ドイツ語の
> a, u, o の上にウムラウト(点々が2つ横並びで付くやつ)が付く文字などです。
> 
> その文字コードをシフトJISで解釈すると、シフトJISの文字コードの1バイト目
> として誤って解釈してしまうため、続く次の1バイトを巻き込んで数々の問題が
> 発生してしまうようです。
> 
> ここで特に問題となるとは、次の1バイトが、例えば文字列を閉じる半角の " や
> 改行文字だったりすると、日本語版の同コンパイラは、その半角文字を直前の
> 1バイトの組として捉えてしまい、その結果その文字本来の意味か無くなって
> しまい、文字列が閉じていない、とか、コメント文をコメントではなく本文とみな
> してしまったり、するわけです。そして結果的にコンパイル時点において文法エラー
> として解釈されてしまったりするわけです。

なるほど。確かにそのような問題に見えます。
hunspell.cxxで問題になっている箇所では、'\237'(元々のhunspell.cxxでは
\237のようにエスケープされていない)というような文字リテラルがあるので
すが、\237に続く "'" が2バイト目と解釈されて文字リテラルが閉じていない
ということでエラーが起きているようです。

-- 
 中本 崇志 (Takashi Nakamoto)
 E-mail: [EMAIL PROTECTED]
 Homepage: http://bd.tank.jp/
 Blog: http://bd.tank.jp/diary/

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

メールによる返信