MISRA C:2012 Rule 7.1

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

Описание

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

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

Объяснение

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

Реализация Polyspace

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

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

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

Примеры

расширить все

#define CST     021              /* Non-Compliant - decimal 17 */
#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) {          
        value1 = !(value1 != 0);  /* Compliant */
    }
}

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

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

Группа: Литералы и Константы
Категория: Требуемая
Категория СМЖЛ: Консультационная
Введенный в R2014b