MISRA C:2012 Rule 5.2

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

Описание

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

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

Объяснение

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

Реализация Polyspace

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

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

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

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

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

Примеры

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

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

extern double engine_exhaust_gas_temperature_raw;
static double engine_exhaust_gas_temperature2_scaled;  /* 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