そもそも gcc-3.4.0 では mbchar が削られていました。 ./gcc/ChangeLog.10 によれば
2003-07-06 Neil Booth
* Makfile.in: Remove traces of mbchar.
* c-parse.in (MULTIBYTE_CHARS): Remove.
* config.in (MULTIBYTE_CHARS): Remove.
* configure: Remove --enable-mbchar.
* configure.in: Remove --enable-mbchar.
* mbchar.c, mbchar.h: Remove.
* system.h: Poison MULTIBYTE_CHARS.
* config/linux-aout.h (MULTIBYTE_CHARS): Remove.
* config/linux.h (MULTIBYTE_CHARS): Remove.
* config/svr4.h (MULTIBYTE_CHARS): Remove.
* config/sparc/linux.h (MULTIBYTE_CHARS): Remove.
との事ですので、「mbchar の動作をマトモにする」という patch はありえません (「mbchar を復活させる」patch ならアリかも知れない)。
まあ元をただせば、弊社の新人教育で使用している Solaris 7 用の開発環境として、Sun Studio やら何やらを購入するのが面倒なので、手近にある gcc で SJIS が通るように変更しよう、というのが開発動機なわけでして。 今の時点で SJIS を通す gcc-3.3.x 向け patch がある以上、あまり頑張る必要はないかな...というのが本音です。
2004-04-26 追記:
Anonymous Coward 氏からいただいた情報によれば、
C、C++、Objective-C コンパイラは、ホスト環境の C ライブラリがサポートするキャラクタエンコーディングのソースファイルを扱えるようになった。 デフォルトの入力キャラクタセットは現在のロケールが採用されるが、-finput-charset コマンドラインオプションで上書きできる。 将来は、インラインエンコーディングマーカーのサポートが追加されるだろう。
との事です。 まずは試してみましょう。
2004-04-26 更に追記:
gcc-3.4.0 では、やはり SJIS の puts("表"); が通らないようです。 gcc-3.4.0 で使用可能な charset 絡みのオプションは -finput-charset, -fexec-charset, -fwide-exec-charset, -ftarget-charset ですが、これらをどう組み合わせても「\」を含む SJIS リテラルは通せませんでした。
./gcc/cppcharset.c をきちんと解読していない段階なので、あまり断定的に言えないのですが。
Stableって古いって意味だっけ? -- Debian初級
mbchar (スコア:0)
Re:mbchar (スコア:1)
おお、情報ありがとうございます。 試してみます。
ただ、cpplib.c とか cpplex.c を眺めてみた感じ、生「\」判定をしているように見えてしまうのですけど...