とやったときと、
では、どう違うのかという話です。
例えば、このようなプログラムを書きます。
int main() { { FILE* fp = fopen("output-char-abc", "wb"); char* s = "abc"; fwrite(s, 1, 3, fp); // 3 byte 出力 fclose(fp); } { FILE* fp = fopen("output-char-あいう", "wb"); char* s = "あいう"; fwrite(s, 1, 6, fp); // 6 byte 出力 fclose(fp); } { FILE* fp = fopen("output-wchar-abc", "wb"); wchar_t* s = L"abc"; fwrite(s, 1, 6, fp); // 6 byte 出力 fclose(fp); } { FILE* fp = fopen("output-wchar-あいう", "wb"); wchar_t* s = L"あいう"; fwrite(s, 1, 6, fp); // 6 byte 出力 fclose(fp); } return 0; }
このように、sの指す文字列の中身は、
LがついているときはUTF16、
ついていないときはShiftJIS
になります。
次に、プロジェクト設定の「文字コード」を、マルチバイト文字セットとUnicode文字セットでそれぞれ保存してみます。
この場合も、当然ですが、""とL""の結果も変わりません。上記したプログラムの挙動は、「文字セット」に関わらず同じです。
つぎに、プログラムの先頭にコメントで何らかの日本語を書いてみます。
結果はこのように、どちらの設定でもUTF16になります。
文字セットの設定はソースファイルの文字コードに影響を与えません。
ちなみにソースコードの文字コードを変えるには
等の方法があるようです。
では「文字セット」は、Visual Studioの何に影響を与えるのでしょうか。
このように、「文字セット」の設定によって、マクロ
・_UNICODE
・UNICODE
または
・_MBCS
が 定義されます。
つまり、「文字セット」の指定は
_UNICODEマクロが定義されるかどうか
の指定という意味です。
(続く...)