MISRA C:2012 Rule 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.

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

Группа: Идентификаторы
Категория: Требуемая
Категория AGC: Требуется
Введенный в R2014b