Мы используем куки, чтобы пользоваться сайтом было удобно.
Хорошо
to the top

Вебинар: Go vet не поможет... Как сделать свой анализатор кода для Go? - 28.09

menu mobile close menu
Проверка проектов
Дополнительная информация
toggle menu Оглавление

V2602. MISRA. Octal and hexadecimal escape sequences should be terminated.

16 Июл 2021

Диагностическое правило основано на руководстве MISRA (Motor Industry Software Reliability Association) по разработке программного обеспечения.

Последовательности восьмеричных и шестнадцатеричных чисел внутри строковых и символьных литералов должны быть завершёнными. Это поможет избежать ошибок с определением позиции завершения escape-последовательности.

Рассмотрим пример:

const char *str = "\x0exit";

Строковый литерал в данном примере имеет длину в 4 символа, а не 5, как может показаться на первый взгляд. Последовательность '\x0e' считается за один символ с кодом 0xE, а не символ с нулевым кодом и букву 'e'.

Поэтому escape-последовательность должна быть завершена одним из двух способов:

  • завершением строкового литерала;
  • началом новой escape-последовательности.

Следующие 2 примера представляют собой правильный вариант завершения escape-последовательности:

const char *str1 = "\x0" "exit";
const char *str2 = "\x1f\x2f";

Диагностическое правило классифицируется как:

  • MISRA-C-2012-Rule-4.1
  • MISRA-C-2023-Rule-4.1
  • MISRA-CPP-2023-Rule-5.13.2