続C4819問題
今日はコンサートのため早めに更新。
コンパイラの動作
C4819問題を考える前に、コンパイラ(プリプロセッサも含む)がどのように動いているのか考えて見ます。コンパイラは次の3つの文字セットを使用します。(説明はいい加減です)
これまでのマルチバイトベースのコンパイラの場合、
物理ソース = 基本ソース = 実行文字 = 環境依存のマルチバイト文字セット
で、文字コードの変換は必要なく、たとえShift-JISのソースにISO-8859-1が混じっても無理やりShift-JISと解釈すればよかったわけです。
ところが、VC8はUnicode(UTF16、UTF8)のソースコードを受け付けるようになりました。そのため、基本ソース文字集合もUnicodeベースに置き換わったものと推測できます。そしてソースコードがマルチバイトの場合、Unicodeへの変換が必要になったのです。