MISRA C编程规范(2)

常量

规则7.1(强制):不应使用用八进制(零除外)和八进制escape序列。

声明与定义

规则8.1(强制):函数应当具有原型声明,且原型在函数的定义和调用范围内都是可见的。

规则8.2(强制):不论何时声明或定义了一个对象或函数,它的类型都应显式声明。

规则8.3(强制):函数的每个参数类型在申明和定义中必须等同的,函数的返回类型也该是等同的。

规则8.4(强制):如果对象或函数被声明了多次,那么它们的类型应该是兼容的。

规则8.5(强制):头文件中不应有对象或函数的定义。

规则8.6(强制):函数应该声明为具有文件作用域。

规则8.7(强制):如果对象的访问只是在单一的函数中,那么对象应该在块范围内声明。

规则8.8(强制):外部对象或函数应该声明在唯一的文件中。

规则8.9(强制):具有外部链接的标识符应该具有准确的外部定义。

规则8.10(强制):在文件范围内声明和定义的所有对象或函数具有内部链接,除非是在需要外部链接的情况下。

规则8.11(强制):static存储类标识符应该用于具有内部链接对象和函数的定义和声明。

规则8.12(强制):当一个数组声明具有外部链接,它的大小应该显式声明或通过初始化进行隐式定义。

初始化

规则9.1(强制):所有自动变量在使用前都应该被赋初值。

The intent of this rule is that all variables shall have been written to before they are read. This does not neccessarily require initialisation at declaration.

Note that according to the ISO C statdard,variables with static storage duration are automatically initialised to zero by default ,unless explicitly initalised.In practise,many embedded enviroments
tdo not implement this behaviours, Static storage duration is a property of all variables declared with the static storage class specifier,or with external linkage.Varigables with automatic storage duration are not usuallu automatically initialised.

规则9.2(强制):应该使用大括号一指示和匹配数组和结构的非零初始化构造。

规则9.3(强制):在枚举列表中,”=“不能显式用于除首元素之外的元素上,除非所有的元素都是显式初始化的。

数值转换

规则10.1(强制):下列条件成立时,整型表达时的值不应隐式转换为不同基本类型:

a) 转换不是带符号的向更宽整数类型的转换,或者

b)表达式是复杂的表达式,或者

b)表达式不是常量而是函数参数,或者

d)表达是不常量而是返回的表达式

规则10.2(强制):下列条件成立时,浮点类型表达的值不应隐式转换为不同的类型:

a)转换不是向更宽浮点类型的转换,或者

b)表达式是复杂表达式,或则

c)表达式是函数参数,或

d)表达式的返回表达式

规则10.3(强制):整型复杂表达式的值只能强制转换到更窄的类型且与表达式的基本类型具有相同的符号

规则10.4(强制):浮点类型表达式的值智能强制转换到更窄的浮点类型。

规则10.5(强制): 如果位运算~和<<应用在基本类型为unsigned char 或unsigned short的操作数,结果应该立即强制转换为操作数的基本类型。

规则10.6(强制):后缀”U“应该用在unsigned 类型的常量上。

时间: 2024-12-09 19:10:28

MISRA C编程规范(2)的相关文章

MISRA C编程规范(一)

环境的有四条强制规则一条建议 规则1.1(强制):所有代码都必须遵照ISO9899:1990 "Programming languages -C ",由ISO/IEC9899/COR1:1996修订. 规则1.2(强制):不能有对未定义行为或未指定行为的依赖性. 规则1.3(强制): 多个编译器和/或语言只能在语言/编译器/汇编器所适合的目标代码定义了通用接口标准时使用. 规则1.4(强制):编译器/链接器要确保31个有效字符和大小写敏感能被外部标识符支持. 规则1.5(建议):浮点应

华为C语言编程规范

DKBA华为技术有限公司内部技术规范DKBA 2826-2011.5C语言编程规范2011年5月9日发布 2011年5月9日实施华为技术有限公司Huawei Technologies Co., Ltd.版权所有 侵权必究All rights reserved密级:confidentiality levelDKBA 2826-2011.52011-06-02 华为机密,未经许可不得扩散 Huawei Confidential 第2页,共61页Page 2 , Total61修订声明Revision

Windows客户端C/C++编程规范“建议”——函数

1 函数 1.1 代码行数控制在80行及以内 等级:[要求] 说明:每个函数的代码行数控制应该控制在80行以内.如果超过这个限制函数内部逻辑一般可以拆分.如果试图超过这个标准,请列出理由.但理由不包含如下: 无法拆分. 流程内部逻辑复杂,无需拆分,即使拆分了,拆分的函数也不会被其他地方用到.(解释:拆分可以减少代码行数,提炼后的函数可以方便读者快速理解函数逻辑并定位问题.) 1.2 代码列数控制在100字符及以内 等级:[要求] 说明:每行代码不可以超过100字符.如果超过这个字符数,代码的美观

Windows客户端C/C++编程规范“建议”——指针

2 指针 2.1 尽量使用智能指针 等级:[推荐] 说明:正确使用智能指针可以省去指针管理的工作. 2.2 类成员变量指针释放后一定要置空 等级:[必须] 说明:如果类成员变量指针在释放后没有置空,将出现如下问题: a) 无法判断指针是否已经是野指针 b) Dump分析很难发现是野指针函数调用导致崩溃 2.3 正确使用delete和delete[] 等级:[必须] 说明:delete[]用于释放动态分配的数组,而delete用于释放对象.两者不可以混用. 2.4 使用指针前要判空 等级:[必须]

Windows客户端C/C++编程规范“建议”——函数调用

3 函数调用 3.1 谨慎使用递归方法 等级:[推荐] 说明:递归方式控制不当,可能会导致栈空间不够而崩溃.一般的递归都可以使用循环代替. 3.2 不要使用using namespace 等级:[必须] 说明:这是曾经教科书上的一种写法,但是该方法存在严重的缺陷.因为如果多个不同的namespace里定义了相同名字的变量或者函数.将导致无法预知和理解编译器最终使用的是哪个命名空间中的数据. 例子: //file1 namespace Space1{ int g_Private = 0; }; /

[转载]通达信插件选股(基于通达信插件编程规范的简单分析)

[转载]通达信插件选股(基于通达信插件编程规范的简单分析) 原文地址:通达信插件选股(基于通达信插件编程规范的简单分析)作者:哈尔滨猫猫 首先声明,鄙人是编程人员,不是股民.对选股概念了解甚少.本文仅作编程人员学习借鉴之用.不对选股理论进行探讨和解释. 以前有客户找我做过通达信插件选股的小任务,当时第一次接触面向接口(此类“接口”)编程,也是第一次接触到股票里相关的概念.最近由于接手一个任务,与上次开发相类似,故旧事重提,仔细研究一番.将个人学习研究所得知识与大家分享.在网上搜相关资料,可用的.

最佳11个PHP编程规范

个人原创网址:http://www.phpthinking.com/archives/375 从设计之初,PHP被广泛用于开发基于Web的应用程序. 由于PHP是一种脚本语言,开发的时候必须遵守一些规范. 本文将讨论常用的良好的代码习惯,或者称为代码规范,在PHP领域. 1,错误报告开启 错误报告是在PHP中一个非常有用的功能,应同时在开发阶段启用. 这可以帮助我们确定我们的代码中的问题. 最常用的功能是"E_ALL",这有助于我们发现所有的警告和严重错误. 必须指出的是,我们把我们的

对Google C++编程规范的理解和实践

1. #define保护 所有头文件都应该使用#define 防止头文件被多重包含(multiple  inclusion),命名格式为: <PROJECT>_<PATH>_<FILE>_H_ 为保证唯一性,头文件的命名应基于其所在项目源代码树的全路径.例如,项目foo 中的头文件 foo/src/bar/baz.h按如下方式保护: #ifndef FOO_BAR_BAZ_H_ #define FOO_BAR_BAZ_H_ ... #endif // FOO_BAR_B

多线程编程规范

规则1    指定线程名  用于查看线程信息 规则2    使用Thread对象的setUncaughtExceptionHandler方法注册Runtime异常的处理者(v1.5+) 说明:Java多线程程序中,所有线程都不允许抛出未捕获的checked exception,也就是说各个线程需要自己把自己的checked exception处理掉.但是无法避免的是unchecked exception,也就是RuntimeException,当抛出异常时子线程会结束,但主线程不会知道,因为主线

Windows客户端C/C++编程规范“建议”——前言

前言 工作中接触了很多编程规范.其中最有意思的是,公司最近发布了一版C/C++编程规范,然后我看到该规范的最后一段时,有这么一句:"该规范不适用于Windows平台开发".看来这份规范是由做其他平台开发的同学制定的.那么做Windows开发的人都去哪儿了?后来由于工作需要,项目组需要我制定一份编程规范.这也是我这系列博客的由来.(转载请指明出于breaksoftware的csdn博客) 说到"规范"",可能没多少人喜欢这样的东西.相信很多工程师和我一样,都