在C语言中混合使用宽字符和窄字符字面量

6

刚刚发现以下所有内容都可以正常工作:

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

输出结果为:
123456
123456
123456

为什么我可以自由地混合和匹配宽字符串字面量和窄字符串字面量以获得一个宽字符串字面量?这是一个被记录下来的行为吗?
2个回答

9
这是一种文档化的行为吗?
是的,这种行为被标准支持,在C99草案标准6.4.5字符串字面量的第4段中说明(重点在于此):
“在翻译阶段6中,由任何相邻字符和宽字符串字面量标记序列指定的多字节字符序列将连接成一个单独的多字节字符序列。如果任何标记都是宽字符串字面量标记,则将结果多字节字符序列视为宽字符串字面量;否则,它被视为字符字符串字面量。”

6

6.4.5 字符串字面值

在第6阶段的翻译过程中,由任何相邻字符和宽字符串字面值记号指定的多字节字符序列将连接成单个多字节字符序列。如果任何一个记号是宽字符串字面值记号,则生成的多字节字符序列将被视为宽字符串字面值;否则,它将被视为字符字符串字面值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接