【MISRA C 2012】Rule 5.2 在同一作用域和名称空间中声明的标识符应该是不同的

1. 规则

1.1 原文

Rule 5.2 Identifiers declared in the same scope and name space shall be distinct
Category Required
Analysis Decidable, Single Translation Unit
Applies to C90, C99

1.2 分类

规则4.2:在同一作用域和名称空间中声明的标识符应该是不同的
Required必须类规范。

2. 关键描述

如果两个标识符都是外部标识符,则此规则不适用,因为这种情况由规则5.1涵盖。
如果其中一个标识符是宏标识符,则不适用此规则,因为这种情况由规则5.4和规则5.5涵盖。
distinct的定义取决于正在使用的C语言的实现和版本:
•在C90中,最低要求是前31个字符是有效的;
•在C99中,最低要求是前63个字符都是有效的
作为单个字符计数的通用字符或扩展源字符。

如果两个标识符仅在非重要字符上不同,则行为未定义。如果考虑可移植性,则使用标准中指定的最小限制来应用此规则将是谨慎的。长标识符可能会损害代码的可读性。虽然许多自动代码生成系统会生成较长的标识符,但将标识符长度保持在远低于此限制的水平是有充分理由的

3. 代码实例

例1,在下面的示例中,所讨论的实现在没有外部链接的标识符中支持31个重要的区分大小写的字符。
标识符engine_expirst_gas_temperature_local符合此规则。尽管它与标识符engine_exhaust_gas_temperature_raw没有区别,但它处于不同的作用域。但是,它不符合规则5.3

/* 1234567890123456789012345678901********* Characters */
extern int32_t engine_exhaust_gas_temperature_raw;
static int32_t engine_exhaust_gas_temperature_scaled; /* Non-compliant */
void f ( void )
{
/* 1234567890123456789012345678901********* Characters */
int32_t engine_exhaust_gas_temperature_local; /* Compliant */
}
/* 1234567890123456789012345678901********* Characters */
static int32_t engine_exhaust_gas_temp_raw;
static int32_t engine_exhaust_gas_temp_scaled; /* Compliant */
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yy九歌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值