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 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