2025年提高代码安全性——MISRA工业标准C语言编写规则

提高代码安全性——MISRA工业标准C语言编写规则Rule1 不得使用三元操作符 Rule2 不得残留被注释掉 的废代码 Rule3 所有标识符不超过 31 字符 建议采用驼峰式或下划线式书写方式 Rule4 不同名空间中 的变量名不得相同 Rule5 不得使用 char int

大家好,我是讯享网,很高兴认识大家。

Rule1:不得使用三元操作符(? : )。

Rule2:不得残留被注释掉的废代码。

Rule3:所有标识符不超过31字符。(建议采用驼峰式或下划线式书写方式)

Rule4:不同名空间中的变量名不得相同。

Rule5:不得使用char, int, float, double, long等基本类型,应该用stdint.h中定义的类型显示表示类型的大小,如uint16_t、int32_t等。

Rule6:禁止使用八进制数

Rule7:不得定义与外部作用域中某个标识符同名的对象,以避免遮盖外部作用域中的标识符。

Rule8:具有文件作用域的对象尽量声名为static的。(限制在本文件中)

Rule9:自动对象(栈对象)使用前必须赋初值。(局部变量定义即初始化)

Rule10:操作符&&和||的右侧表达式不得具有副作用(side-effect)。(注意短路原理,和运算符优先级问题)

Rule11:不得对有符号数施加位操作,例如 1 << 4 将被禁止,必须写 1UL << 4。(有符号数的右移应避免)

Rule12:不得对有副作用的表达式施加sizeof操作符。

Rule13:除了循环控制语句,不得使用逗号表达式。

Rule14:不得显式判断浮点数的相等性和不等性。

#include <math.h> #define EPSILON 0.000001 //根据精度需要 if ( fabs( fa - fb) < EPSILON ) //extern float fabs(float x); { printf("fa<fb\n"); }

讯享网

Rule15:不得遗留“永远不会用到”的代码。

Rule16:除了switch语句,不得使用标号(label)。


讯享网

Rule17:不得使用goto

Rule18:不得使用continue。???

Rule19:除了switch语句,不得使用break

Rule20:if, else if, else, while, do..while, for语句块必须使用{}括起

Rule21:循环计数器的值不得在循环体内修改

Rule22:禁止任何直接和间接的递归函数调用

Rule23:不应该使用#undef。

Rule24:不得将宏作为参数传给宏函数。

Rule25:在一个宏定义中,#或符号只能出现一次。

Rule26:禁止指针运算(代之以数组下标运算)。

Rule27:禁止超过两级的指针

Rule28:禁止使用指向函数的非常量指针。

Rule29:禁止使用setjmp, longjmp。

Rule30:禁止使用atoi, atof, atol。(建议使用strtol, strtod等函数)

Rule31:禁止使用abort, exit, getenv。

小讯
上一篇 2025-02-20 11:06
下一篇 2025-04-07 11:27

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/56065.html