【MISRA C 2012】Rule 5.1 外部标识符应该是不同的

2023-11-23 09:01

本文主要是介绍【MISRA C 2012】Rule 5.1 外部标识符应该是不同的,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  • 1. 规则
    • 1.1 原文
    • 1.2 分类
  • 2. 关键描述
  • 3. 代码实例

1. 规则

1.1 原文

Rule 5.1 External identifiers shall be distinct
Category Required
Analysis Decidable, System
Applies to C90, C99

1.2 分类

规则5.1:外部标识符应该是不同的
Required必须类规范。

2. 关键描述

该规则要求不同的外部标识符在实现所施加的限制内是不同的。

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

•在C90中,最低要求是外部标识符的前6个字符是重要的,但它们的大小写不需要是重要的;

•在C99中,最低要求是外部标识符的前31个字符是有效的,每个通用字符或相应的扩展源字符占用6到10个字符。

在实践中,许多实现提供了更大的限制。例如,C90中的外部标识符通常是区分大小写的,并且至少前31个字符是有效的

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

3. 代码实例

例1,规范中例程:
在下面的示例中,所有定义都出现在同一个翻译单元中。所讨论的实现在外部标识符中支持31个重要的区分大小写的字符

/* 1234567890123456789012345678901********* Characters */
int32_t engine_exhaust_gas_temperature_raw;
int32_t engine_exhaust_gas_temperature_scaled; /* Non-compliant */
/* 1234567890123456789012345678901********* Characters */
int32_t engine_exhaust_gas_temp_raw;
int32_t engine_exhaust_gas_temp_scaled; /* Compliant */

例2,
在下面的不兼容示例中,该实现在外部标识符中支持6个不区分大小写的重要字符。两个翻译单元中的标识符不同,但其有效字符并不明显

/* file1.c */
int32_t abc = 0;
/* file2.c */
int32_t ABC = 0;

这篇关于【MISRA C 2012】Rule 5.1 外部标识符应该是不同的的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/416817

相关文章

MySQL中慢SQL优化的不同方式介绍

《MySQL中慢SQL优化的不同方式介绍》慢SQL的优化,主要从两个方面考虑,SQL语句本身的优化,以及数据库设计的优化,下面小编就来给大家介绍一下有哪些方式可以优化慢SQL吧... 目录避免不必要的列分页优化索引优化JOIN 的优化排序优化UNION 优化慢 SQL 的优化,主要从两个方面考虑,SQL 语

spring-boot-starter-thymeleaf加载外部html文件方式

《spring-boot-starter-thymeleaf加载外部html文件方式》本文介绍了在SpringMVC中使用Thymeleaf模板引擎加载外部HTML文件的方法,以及在SpringBoo... 目录1.Thymeleaf介绍2.springboot使用thymeleaf2.1.引入spring

Python如何计算两个不同类型列表的相似度

《Python如何计算两个不同类型列表的相似度》在编程中,经常需要比较两个列表的相似度,尤其是当这两个列表包含不同类型的元素时,下面小编就来讲讲如何使用Python计算两个不同类型列表的相似度吧... 目录摘要引言数字类型相似度欧几里得距离曼哈顿距离字符串类型相似度Levenshtein距离Jaccard相

在不同系统间迁移Python程序的方法与教程

《在不同系统间迁移Python程序的方法与教程》本文介绍了几种将Windows上编写的Python程序迁移到Linux服务器上的方法,包括使用虚拟环境和依赖冻结、容器化技术(如Docker)、使用An... 目录使用虚拟环境和依赖冻结1. 创建虚拟环境2. 冻结依赖使用容器化技术(如 docker)1. 创

关于Spring @Bean 相同加载顺序不同结果不同的问题记录

《关于Spring@Bean相同加载顺序不同结果不同的问题记录》本文主要探讨了在Spring5.1.3.RELEASE版本下,当有两个全注解类定义相同类型的Bean时,由于加载顺序不同,最终生成的... 目录问题说明测试输出1测试输出2@Bean注解的BeanDefiChina编程nition加入时机总结问题说明

java中不同版本JSONObject区别小结

《java中不同版本JSONObject区别小结》本文主要介绍了java中不同版本JSONObject区别小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们... 目录1. FastjsON2. Jackson3. Gson4. org.json6. 总结在Jav

Python中连接不同数据库的方法总结

《Python中连接不同数据库的方法总结》在数据驱动的现代应用开发中,Python凭借其丰富的库和强大的生态系统,成为连接各种数据库的理想编程语言,下面我们就来看看如何使用Python实现连接常用的几... 目录一、连接mysql数据库二、连接PostgreSQL数据库三、连接SQLite数据库四、连接Mo

2.1/5.1和7.1声道系统有什么区别? 音频声道的专业知识科普

《2.1/5.1和7.1声道系统有什么区别?音频声道的专业知识科普》当设置环绕声系统时,会遇到2.1、5.1、7.1、7.1.2、9.1等数字,当一遍又一遍地看到它们时,可能想知道它们是什... 想要把智能电视自带的音响升级成专业级的家庭影院系统吗?那么你将面临一个重要的选择——使用 2.1、5.1 还是

java脚本使用不同版本jdk的说明介绍

《java脚本使用不同版本jdk的说明介绍》本文介绍了在Java中执行JavaScript脚本的几种方式,包括使用ScriptEngine、Nashorn和GraalVM,ScriptEngine适用... 目录Java脚本使用不同版本jdk的说明1.使用ScriptEngine执行javascript2.

2. c#从不同cs的文件调用函数

1.文件目录如下: 2. Program.cs文件的主函数如下 using System;using System.Collections.Generic;using System.Linq;using System.Threading.Tasks;using System.Windows.Forms;namespace datasAnalysis{internal static