V2602. MISRA. Octal and hexadecimal escape sequences should be terminated.
Данное диагностическое правило основано на руководстве MISRA (Motor Industry Software Reliability Association) по разработке программного обеспечения.
Это правило актуально только для C. Последовательности восьмеричных и шестнадцатеричных чисел внутри строковых и символьных литералов должны быть завершёнными. Это поможет избежать ошибок с определением позиции завершения escape-последовательности.
Рассмотрим пример:
const char *str = "\x0exit";
Строковый литерал в данном примере имеет длину в 4 символа, а не 5, как может показаться на первый взгляд. Последовательность '\x0e' считается за один символ с кодом 0xE, а не символ с нулевым кодом и букву 'e'.
Поэтому escape-последовательность должна быть завершена одним из двух способов:
- завершением строкового литерала;
- началом новой escape-последовательности.
Следующие 2 примера представляют собой правильный вариант завершения escape-последовательности:
const char *str1 = "\x0" "exit";
const char *str2 = "\x1f\x2f";
Данная диагностика классифицируется как:
|