Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

According to MISRA 2008, concatenation of wide and narrow string literals leads to undefined behavior. This was once considered implicitly undefined behavior. However, the C Standard [ISO/IEC 9899:2011]  does does define this behavior, and it is further explained in C11. According to Section section 6.4.5, paragraph 5:

In translation phase 6, the multibyte character sequences specified by any sequence of adjacent character and identically-prefixed string literal tokens are concatenated into a single multibyte character sequence. If any of the tokens has an encoding prefix, the resulting multibyte character sequence is treated as having the same prefix; otherwise, it is treated as a character string literal. Whether differently-prefixed wide string literal tokens can be concatenated and, if so, the treatment of the resulting multibyte character sequence are implementation-defined.

Nonetheless, it is recommended that string literals that are concatenated should all be the same type , so as not to rely on implementation-defined behavior , or undefined behavior if compiled on a platform that supports only supports C90.

Noncompliant Code Example

This noncompliant code example concatenates wide and narrow string literals. Although the behavior is undefined in this case, the programmer probably intended to create a wide-string literal.

Code Block
bgColor#ffcccc
langc
wchar_t *msg = L"This message is very long, so I want to divide it "
                "into two parts.";

...

MISRA Rule 2-13-5

Bibliography

ISO/IEC 9899:1990

ISO/IEC 9899:1999

ISO/IEC 9899:2011 Section 6.4.5, "String literals"

...