MISRA C:2012 Rule 5.4

Макро-идентификаторы должны быть отличными

Описание

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

Макро-идентификаторы должны быть отличными.

Объяснение

Имена макро-идентификаторов должны быть отличны и от других макро-идентификаторов и от их параметров.

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

Обменивайтесь сообщениями в отчете

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

  • Макро-идентификаторы должны быть отличными. Макро-параметр XX имеет те же значительные символы как макро-параметр YY в макро-ZZ.

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

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

Примеры

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

#define engine_exhaust_gas_temperature_raw egt_r
#define engine_exhaust_gas_temperature_scaled egt_s   /* Non-compliant */

#define engine_exhaust_gas_temp_raw egt_r
#define engine_exhaust_gas_temp_scaled egt_s          /* Compliant */

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

#define engine_xxx_xxxxxxxxx_xxxxxxxxx_xxxxxxxxx_xxxxxxxxx_xxxxxxxxx_raw egt_r
#define engine_xxx_xxxxxxxxx_xxxxxxxxx_xxxxxxxxx_xxxxxxxxx_xxxxxxxxx_raw_scaled egt_s
    /* Non-compliant */

/* 63 significant case-sensitive characters in macro identifiers */
#define new_engine_xxxxxxxxx_xxxxxxxxx_xxxxxxxxx_xxxxxxxxx_xxxxxxxxx_raw egt_r
#define new_engine_xxxxxxxxx_xxxxxxxxx_xxxxxxxxx_xxxxxxxxx_xxxxxxxxx_scaled egt_s
    /* Compliant */

В этом примере, макро-engine_xxx_xxxxxxxxx_xxxxxxxxx_xxxxxxxxx_xxxxxxxxx_xxxxxxxxx___gaz_scaled имеет те же первые 63 символа как предыдущий макро-engine_xxx_xxxxxxxxx_xxxxxxxxx_xxxxxxxxx_xxxxxxxxx_xxxxxxxxx___raw.

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

Группа: Идентификаторы
Категория: необходимый
Категория AGC: необходимый
Язык: C90, C99

Введенный в R2014b