exponenta event banner

MISRA C:2012 Правило 4.1

Восьмеричная и шестнадцатеричная escape-последовательности должны быть прекращены

Описание

Определение правила

Восьмеричная и шестнадцатеричная escape-последовательности должны быть прекращены.

Объяснение

Существует вероятность путаницы, если за восьмеричной или шестнадцатеричной escape-последовательностью следуют другие символы. Например, символьная константа '\x1f' состоит из одного символа, в то время как константа символа '\x1g' состоит из двух символов '\x1' и 'g'. Способ представления многосимвольных констант в виде целых чисел определяется реализацией.

Если каждая восьмеричная или шестнадцатеричная escape-последовательность в символьной константе или строковом литерале завершается, можно уменьшить потенциальную путаницу.

Поиск неисправностей

Если вы ожидаете нарушения правила, но не видите его, обратитесь к разделу Нарушения стандартов кодирования не отображаются.

Примеры

развернуть все

const char *s1 = "\x41g";     /* Non-compliant */					
const char *s2 = "\x41" "g";  /* Compliant - Terminated by end of literal */		
const char *s3 = "\x41\x67";  /* Compliant - Terminated by another escape sequence*/		

int c1 = '\141t';             /* Non-compliant */				
int c2 = '\141\t';            /* Compliant - Terminated by another escape sequence*/		

В этом примере правило нарушается, когда escape-последовательность не завершается концом строкового литерала или другой escape-последовательности.

Проверить информацию

Группа: Наборы символов и лексические условные обозначения
Категория: Обязательно
Категория СМЖЛ: требуется
Представлен в R2014b