exponenta event banner

MISRA C:2012 Правило 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