exponenta event banner

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

Идентификаторы, объявленные в одном объеме и пространстве имен, должны быть различными

Описание

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

Идентификаторы, объявленные в одной области и пространстве имен, должны быть различными.

Объяснение

Если разница между двумя именами возникает гораздо позже в названиях, их можно легко принять друг за друга. Читаемость кода снижается.

Внедрение Polyspace

Polyspace ® считает два имени различными, если имеется разница между их первыми 63 символами. В C90 разница должна иметь место между первыми 31 символами. Для проверки правил C90 используйте значениеc90 для опции C standard version (-c-version). Количество сравниваемых символов можно изменить с помощью опции -code-behavior-specifications. Посмотрите -code-behavior-specifications.

Дополнительное сообщение в отчете

Идентификатор XX имеет те же значимые символы, что и идентификатор YY.

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

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

Примеры

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

extern int engine_exhaust_gas_temperature_raw;
static int engine_exhaust_gas_temperature_scaled;      /* Non-compliant */

extern double raw_engine_exhaust_gas_temperature;
static double scaled_engine_exhaust_gas_temperature;  /* Compliant */

void func ( void )
{
  /* Not in the same scope */
  int engine_exhaust_gas_temperature_local;            /* Compliant */
}

В этом примере идентификатор engine_exhaust_gas_temperature_scaled имеет тот же 31 символ, что и предыдущий идентификатор, engine_exhaust_gas_temperature_raw.

Правило не применяется, если два идентификатора имеют одинаковый 31 символ, но разные области. Например, engine_exhaust_gas_temperature_local имеет тот же 31 символ, что и engine_exhaust_gas_temperature_raw но разная сфера охвата.

extern int engine_xxx_xxxxxxxxx_xxxxxxxxx_xxxxxxxxx_xxxxxxxxx_xxxxxxxxx_x_raw;
static int engine_xxx_xxxxxxxxx_xxxxxxxxx_xxxxxxxxx_xxxxxxxxx_xxxxxxxxx_x_scale; /* Non-compliant */

    
extern int engine_gas_xxxxxxxxx_xxxxxxxxx_xxxxxxxxx_xxxxxxxxx_xxxxxxxxx__raw;
static int engine_gas_xxxxxxxxx_xxxxxxxxx_xxxxxxxxx_xxxxxxxxx_xxxxxxxxx__scale; /* Compliant */

void func ( void )
{
/* Not in the same scope */
    int engine_xxx_xxxxxxxxx_xxxxxxxxx_xxxxxxxxx_xxxxxxxxx_xxxxxxxxx_x_local; /* Compliant */
}

В этом примере идентификатор engine_xxx_xxxxxxxxx_xxxxxxxxx_xxxxxxxxx_xxxxxxxxx_xxxxxxxxx_x_scale имеет те же 63 символа, что и предыдущий идентификатор, engine_xxx_xxxxxxxxx_xxxxxxxxx_xxxxxxxxx_xxxxxxxxx_xxxxxxxxx_x_raw.

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

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