主要内容

MISRA C:2012 Rule 5.4

Macro identifiers shall be distinct

描述

规则定义

Macro identifiers shall be distinct 1 .

理由

宏标识符的名称必须不同于其他宏标识符及其参数。

Polyspace 实现

如果定义了两个前 63 个字符相同但值不同的宏,则检查项会报告违规。如果同一个宏在中间被取消定义,然后以不同的值重新定义,则检查项不会报告违规。

63 个字符的截止限制适用于基于 C99 的分析。在 C90 中,截止限制是 31 个字符。换句话说,如果两个宏的前 31 个字符没有差异,则检查项会将它们视为实际上相同。要使用 C90 规则检查,请为 C 标准版本 (-c-version) 选项使用 c90 值。您可以使用 -code-behavior-specifications 选项更改比较的字符数。请参阅 -code-behavior-specifications

故障排除

如果您预期会出现违规,但未看到该违规,请参阅诊断为何编码规范违规未按预期显示

示例

全部展开


#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 与上一个宏 engine_exhaust_gas_temperature_scaled 的前 31 个字符相同。


#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 与上一个宏 engine_xxx_xxxxxxxxx_xxxxxxxxx_xxxxxxxxx_xxxxxxxxx_xxxxxxxxx___raw 的前 63 个字符相同。

检查信息

组:标识符
类别:必需
AGC 类别:必需

版本历史记录

在 R2014b 中推出

全部展开


1 All MISRA coding rules and directives are © Copyright The MISRA Consortium Limited 2021.

The MISRA coding standards referenced in the Polyspace® Bug Finder™ documentation are from the following MISRA standards:

  • MISRA C:2004

  • MISRA C:2012

  • MISRA C:2023

  • MISRA C++:2008

  • MISRA C++:2023

MISRA and MISRA C are registered trademarks of The MISRA Consortium Limited 2021.