刚刚发现以下所有工作:
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
String literals paragrph 4部分说(强调我的):
在翻译阶段 6 中,由任何相邻字符序列和宽字符串文字标记指定的多字节字符序列连接成单个多字节字符序列。如果任何标记是宽字符串文字标记,则生成的多字节字符序列将被视为宽字符串文字;否则,它被视为字符串文字。
6.4.5 字符串文字
在翻译阶段 6 中,由任何相邻字符序列和宽字符串文字标记指定的多字节字符序列连接成单个多字节字符序列。如果任何标记是宽字符串文字标记,则生成的多字节字符序列将被视为宽字符串文字;否则,它被视为字符串文字。