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

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

Описание

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

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

Объяснение

Polyspace® рассматривает два имени как отличные, если существует различие между их первыми 63 символами. Если различие между двумя именами происходит только вне первых 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: необходимый
Язык: C90, C99

Введенный в R2014b