【MISRA C 2012】Rule 5.4 宏标识符应该是不同的

  • [1. 规则](#1. 规则)
    • [1.1 原文](#1.1 原文)
    • [1.2 分类](#1.2 分类)
  • [2. 关键描述](#2. 关键描述)
  • [3. Example](#3. Example)
  • [4. 代码实例](#4. 代码实例)

1. 规则

1.1 原文

1.2 分类

规则5.4:宏标识符应该是不同的
Required要求类规范。

2. 关键描述

该规则要求,当定义宏时,其名称与:

•当前定义的其他宏的名称;和

•参数的名称。

它还要求给定宏的参数名彼此不同,但不要求宏参数名在两个不同的宏之间不同

distinct的定义取决于正在使用的C语言的实现和版本:

•在C90中,最低要求是宏标识符的前31个字符是有效的;

•在C99中,最小要求是宏标识符的前63个字符是重要的。

在实践中,实现可能提供更大的限制。该规则要求宏标识符在实现所施加的限制内是不同的

如果两个宏标识符仅在非重要字符上不同,则行为未定义。由于宏参数仅在其宏的扩展期间是活动的,因此不存在一个宏中的参数与另一个宏中的参数相混淆的问题。

如果考虑可移植性,则使用标准中指定的最小限制来应用此规则将是谨慎的。

长宏标识符可能会损害代码的可读性。虽然许多自动代码生成系统会生成较长的宏标识符,但将宏标识符长度保持在远低于此限制的水平是有道理的。

注意:在C99中,如果扩展源字符出现在宏名称中,并且该字符没有相应的通用字符,则标准不会指定它占用多少字符。

3. Example

4. 代码实例

例1,在下面的示例中,所讨论的实现在宏标识符中支持31个重要的区分大小写的字符

c 复制代码
/* 1234567890123456789012345678901********* Characters */
#define engine_exhaust_gas_temperature_raw egt_r
#define engine_exhaust_gas_temperature_scaled egt_s /* Non-compliant */
/* 1234567890123456789012345678901********* Characters */
#define engine_exhaust_gas_temp_raw egt_r
#define engine_exhaust_gas_temp_scaled egt_s /* Compliant */
相关推荐
c++之路9 分钟前
C++ 多线程
开发语言·c++
CHANG_THE_WORLD15 分钟前
<Fluent Python > Unicode 文本与字节
开发语言·python
AI人工智能+电脑小能手20 分钟前
【大白话说Java面试题】【Java基础篇】第20题:HashMap在计算index的时候,为什么要对数组长度做减1操作
java·开发语言·数据结构·后端·面试·哈希算法·hash-index
凯瑟琳.奥古斯特20 分钟前
Bootstrap快速上手指南
开发语言·前端·css·bootstrap·html
我就是妖怪33 分钟前
Kimi K2.6 智能效果实测与能力全景展示
开发语言
中二痞36 分钟前
下载Python 版本,环境变量变更以及PyCharm更换python版本
开发语言·python·pycharm
故事和你9138 分钟前
洛谷-算法2-3-分治与倍增5
开发语言·数据结构·c++·算法·动态规划·图论
SilentSamsara39 分钟前
标准库精讲:collections/itertools/functools/pathlib 实战
开发语言·vscode·python·青少年编程·pycharm
逻辑驱动的ken43 分钟前
Java高频面试考点场景题17
开发语言·jvm·面试·求职招聘·春招
charlie1145141911 小时前
通用GUI编程技术——图形渲染实战(三十九)——纹理与采样器:从WIC加载到GPU渲染
开发语言·c++·图形渲染·win32