MISRA C:2012 Rule 5.4

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

Описание

Определение правила

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

Объяснение

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

Реализация Polyspace

Проверка вызывает нарушение, если два макроса с одинаковыми первыми 63 символами заданы с различными значениями. Шашка не вызывает нарушения, если:

  • Два макроса с одинаковыми первыми 63 символами заданы с одним и тем же значением (даже с пустым значением).

  • Тот же макрос задан с различными значениями, но макрос не определен между ними.

Срез в 63 символа применяется к анализу C99-based. В C90 срез составляет 31 символ. Другими словами, шашка рассматривает два макроса как эффективно одинаковые, если нет различий в их первых 31 символах. Чтобы использовать проверку правил C90, используйте значение c90 для опции C standard version (-c-version). Вы можете изменить количество символов по сравнению с помощью опции -code-behavior-specifications. См. -code-behavior-specifications.

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

  • Идентификаторы макросов должны быть различными. Макрос 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: Требуется
Введенный в R2014b