6

次のすべてが機能することがわかりました。

printf( "%ls\n", "123" L"456" );
printf( "%ls\n", L"123" "456" );
printf( "%ls\n", L"123" L"456" );

出力は

123456
123456
123456

ワイド文字列リテラルとナロー文字列リテラルを自由に組み合わせて、結果としてワイド文字列リテラルを取得できるのはなぜですか? それは文書化された動作ですか?

4

2 に答える 2

9

それは文書化された動作ですか?

はい、この動作は標準でサポートされています。C99ドラフト標準のセクション6.4.5 文字列リテラルのパラグラフ4には次のように記載されています (強調鉱山):

変換フェーズ 6 では、隣接する文字およびワイド文字列リテラル トークンの任意のシーケンスによって指定されたマルチバイト文字シーケンスが、単一のマルチバイト文字シーケンスに連結されます。トークンのいずれかがワイド文字列リテラル トークンである場合、結果のマルチバイト文字シーケンスはワイド文字列リテラルとして扱われます。それ以外の場合は、文字列リテラルとして扱われます。

于 2013-08-07T11:47:13.417 に答える
6

6.4.5 文字列リテラル

変換フェーズ 6 では、隣接する文字およびワイド文字列リテラル トークンの任意のシーケンスによって指定されたマルチバイト文字シーケンスが、単一のマルチバイト文字シーケンスに連結されます。トークンのいずれかがワイド文字列リテラル トークンである場合、結果のマルチバイト文字シーケンスはワイド文字列リテラルとして扱われます。それ以外の場合は、文字列リテラルとして扱われます。

于 2013-08-07T11:47:25.007 に答える