次のすべてが機能することがわかりました。
printf( "%ls\n", "123" L"456" );
printf( "%ls\n", L"123" "456" );
printf( "%ls\n", L"123" L"456" );
出力は
123456
123456
123456
ワイド文字列リテラルとナロー文字列リテラルを自由に組み合わせて、結果としてワイド文字列リテラルを取得できるのはなぜですか? それは文書化された動作ですか?
次のすべてが機能することがわかりました。
printf( "%ls\n", "123" L"456" );
printf( "%ls\n", L"123" "456" );
printf( "%ls\n", L"123" L"456" );
出力は
123456
123456
123456
ワイド文字列リテラルとナロー文字列リテラルを自由に組み合わせて、結果としてワイド文字列リテラルを取得できるのはなぜですか? それは文書化された動作ですか?
それは文書化された動作ですか?
はい、この動作は標準でサポートされています。C99ドラフト標準のセクション6.4.5
文字列リテラルのパラグラフ4には次のように記載されています (強調鉱山):
変換フェーズ 6 では、隣接する文字およびワイド文字列リテラル トークンの任意のシーケンスによって指定されたマルチバイト文字シーケンスが、単一のマルチバイト文字シーケンスに連結されます。トークンのいずれかがワイド文字列リテラル トークンである場合、結果のマルチバイト文字シーケンスはワイド文字列リテラルとして扱われます。それ以外の場合は、文字列リテラルとして扱われます。
6.4.5 文字列リテラル
変換フェーズ 6 では、隣接する文字およびワイド文字列リテラル トークンの任意のシーケンスによって指定されたマルチバイト文字シーケンスが、単一のマルチバイト文字シーケンスに連結されます。トークンのいずれかがワイド文字列リテラル トークンである場合、結果のマルチバイト文字シーケンスはワイド文字列リテラルとして扱われます。それ以外の場合は、文字列リテラルとして扱われます。