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