Диагностическое правило основано на руководстве MISRA (Motor Industry Software Reliability Association) по разработке программного обеспечения.
Правило актуально только для C ++.
Анализатор обнаружил в коде фрагмент, где происходит автоматическое объединение строковых литералов с разными префиксами кодировок.
Конкатенация строковых литералов с разными префиксами вызывает конфликт типов данных элементов строки (например, char и wchar_t). Компилятор не может корректно определить итоговый тип и размерность результирующего литерала. В зависимости от настроек сборки, это приводит либо к ошибке компиляции, либо к неопределённому поведению из-за некорректного приведения типов, что полностью искажает байтовое представление символов в памяти.
Некорректный вариант кода:
const wchar_t *banner = "Hello," L" world";
При конкатенации строкового литерала без префикса со строковым литералом с префиксом L типы данных конфликтуют, из-за чего компилятор не может безопасно собрать единый литерал.
Исправленный вариант кода:
const wchar_t *banner = L"Hello," L" world";
Была ли полезна эта страница документации?
Мы ответим вам на:
Если вы так и не получили ответ, пожалуйста, проверьте, отфильтровано ли письмо в одну из следующих стандартных папок: