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

Вебинар: Стратегия без иллюзий: как превращать цели в результаты - 19.08

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

Ты поймал бага за сек!
А мы в коде ловим их за доли секунды. Хочешь проверить?

Попробовать бесплатно