c – 当前缀字符串与非前缀字符串相邻时,字符串文字串联失败?

在MSVS2013中,我认为它符合C 11,编译器不喜欢以下内容:

LPCTSTR str = _T("boo " "hoo");

这意味着:

wchar_t const * str = L"boo " "hoo";

根据cppreference.com(我知道这不是确定的,但它是我目前唯一的参考):

>并行放置的字符串文字在编译期间连接在一起.那就是“你好”,“世界!”产生(单个)字符串“Hello,world!”.

>如果两个字符串具有相同的编码前缀(或者两者都没有),则生成的字符串将具有相同的编码前缀(或无前缀).
>如果其中一个字符串具有编码前缀而另一个字符串不具有编码前缀,那么不会将其视为与另一个字符串具有相同的编码前缀.
>如果UTF-8字符串文字和宽字符串文字并排,则程序格式错误.
>实现可能支持也可能不支持编码前缀的任何其他组合.这种连接的结果是实现定义的.

重点是我自己的.

任何人都可以确认这是否符合cppreference指示的标准?

编辑

由于不喜欢,我的意思是我得到以下错误:

error C2308: concatenating mismatched strings
最佳答案
2003 ISO C标准2.13.4p3节说:

In translation phase 6 (2.1), adjacent narrow string literals are
concatenated and adjacent wide string literals are concatenated. If a
narrow string literal token is adjacent to a wide string literal
token, the behavior is undefined. Characters in concatenated strings
are kept distinct.

2011年标准2.14.5p13节说:

In translation phase 6 (2.2), adjacent string literals are
concatenated. If both string literals have the same encoding-prefix,
the resulting concatenated string literal has that encoding-prefix.
If one string literal has no encoding-prefix, it is treated as a
string literal of the same encoding-prefix as the other operand. If a
UTF-8 string literal token is adjacent to a wide string literal token,
the program is ill-formed. Any other concatenations are conditionally
supported with implementation-defined behavior.

因此序列L“boo”“hoo”在C2003中具有未定义的行为,但在C2011中定义明确并且等同于L“boohoo”.

我不能从你给我们的信息中看出MSVS2013是否符合C 11.你说它“不喜欢”构造,但是如果不喜欢被表达为非致命警告并且语义是指定的在2011年的标准中,它可以符合要求.

您能否更新问题以显示诊断消息?

转载注明原文:c – 当前缀字符串与非前缀字符串相邻时,字符串文字串联失败? - 代码日志