在C中混合宽和窄的字符串文字

时间:2013-08-07 11:42:44

标签: c string-literals widestring

刚刚发现以下所有工作:

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

输出

123456
123456
123456

为什么我可以自由地混合和匹配宽和窄的字符串文字以获得宽字符串文字?这是记录在案的行为吗?

2 个答案:

答案 0 :(得分:8)

  

这是记录在案的行为吗?

是的,标准支持此行为,来自C99 draft standard部分的6.4.5 字符串文字 paragrph 4 强调我的):

  

在翻译阶段6中,由任何序列指定的多字节字符序列   相邻字符和宽字符串文字标记连接成单个多字节   字符序列。 如果任何令牌是宽字符串文字标记,则生成   多字节字符序列被视为宽字符串文字;否则,它被视为字符串文字。

答案 1 :(得分:5)

6.4.5字符串文字

  

在翻译阶段6中,指定的多字节字符序列   任何相邻字符序列和宽字符串文字标记都是   连接成单个多字节字符序列。如果有的话   标记是宽字符串文字标记,由此产生的多字节   字符序列被视为宽字符串文字;否则,它   被视为字符串文字。