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

Восьмеричные константы не должны использоваться

Описание

Управляйте определением

Восьмеричные константы не должны использоваться.

Объяснение

Восьмеричные константы обозначаются начальным нулем. Разработчики могут перепутать восьмеричную константу как десятичную константу с избыточным начальным нулем.

Реализация Polyspace

Если вы используете восьмеричные константы в макроопределении, средство проверки правила отмечает проблему, даже если макрос не используется.

Обменивайтесь сообщениями в отчете

Восьмеричные константы не должны использоваться.

Поиск и устранение проблем

Если вы ожидаете нарушение правила, но не видите его, обратитесь к Кодированию Стандартных Нарушений, Не Отображенных.

Примеры

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

#define CST     021
#define VALUE   010              /* Compliant - constant not used */
#if 010 == 01                    /* Non-Compliant - constant used */
#define CST 021                  /* Non-Compliant - constant not used */
#endif

extern short code[5];
static char* str2 = "abcd\0efg";  /* Compliant */

void main(void) {
    int value1 = 0;               /* Compliant */
    int value2 = 01;              /* Non-Compliant - decimal 01 */
    int value3 = 1;               /* Compliant */
    int value4 = '\109';          /* Compliant */

    code[1] = 109;                /* Compliant     - decimal 109 */
    code[2] = 100;                /* Compliant     - decimal 100 */
    code[3] = 052;                /* Non-Compliant - decimal 42 */
    code[4] = 071;                /* Non-Compliant - decimal 57 */

    if (value1 != CST) {          /* Non-Compliant - decimal 17 */
        value1 = !(value1 != 0);  /* Compliant */
    }
}

В этом примере не нарушено правило, когда восьмеричные константы используются, чтобы задать макросы CST и VALUE. Правило нарушено только, когда макросы используются.

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

Группа: литералы и константы
Категория: необходимый
Категория AGC: консультация
Язык: C90, C99

Введенный в R2014b