﻿# V2677\. MISRA\. String literals with different encoding prefixes should not be concatenated\.

Диагностическое правило основано на руководстве [MISRA](https://misra.org.uk/) \(Motor Industry Software Reliability Association\) по разработке программного обеспечения\.

Правило актуально только для C \+\+\.

Анализатор обнаружил в коде фрагмент, где происходит автоматическое объединение строковых литералов с разными префиксами кодировок\.

Конкатенация строковых литералов с разными префиксами вызывает конфликт типов данных элементов строки \(например, `char` и `wchar_t`\)\. Компилятор не может корректно определить итоговый тип и размерность результирующего литерала\. В зависимости от настроек сборки, это приводит либо к ошибке компиляции, либо к неопределённому поведению из\-за некорректного приведения типов, что полностью искажает байтовое представление символов в памяти\.

Некорректный вариант кода:

```cpp
const wchar_t *banner = "Hello," L" world";
```

При конкатенации строкового литерала без префикса со строковым литералом с префиксом `L` типы данных конфликтуют, из\-за чего компилятор не может безопасно собрать единый литерал\.

Исправленный вариант кода:

```cpp
const wchar_t *banner = L"Hello," L" world";
```