首页 > 代码库 > MISRA C (3)

MISRA C (3)

控制流

1、不能有不能到达的(unreachable)的代码
2、所有非空语句(non-null statement)应该:
a)不管怎样执行都至少有一个副作用
b)可以引起控制流的转移
3、在预处理之前,空语句只能出现在一行上,其后可以跟有注释,假设紧跟空语句的第一个字符是空格
4、不应使用goto语句
5、不应使用continue语句
6、对任何迭代语句至多只应有一条break语句用于循环的结束
7、一个函数在其结尾应该有单一的退出点
8、组成switch、while、do...while或for结构体的语句应该跟随有复合语句或者另外的if语句
9、if(表达式)结构应该跟随复合语句。else关键字应该跟随有复合语句或者另外的if语句
10、所有的if...else if结构应该由else子句结束

Switch语句
1、switch标签只能用在当前最紧密封闭(closely-enclosing)的复合语句是switch语句体的时候
2、无条件的break语句应该终止每个非空的switch子句
3、switch语句的最后子句应该是default子句
4、switch表达式不应是有效的布尔值
5、每个switch语句至少有一个case子句

函数
1、函数的定义不得带有可变数量的参数
2、函数不能调用自身,不管是直接还是间接的。
3、在函数的原型声明中应该为所有参数给出标识符
4、函数的声明和定义中使用的标识符应该一制
5、不带参数的函数应当声明为具有void类型的参数
6、传递给一个函数的参数应该与声明的参数匹配
7、函数的原型中的指针参数如果不是用于修改所指向的对象,就应该声明为指向const的指针
8、带有non-void返回类型的函数其所有退出路径都应具有显式的带表达式的returned语句
9、函数的标识符的使用只能或者加前缀&,或者使用括号的参数列表,列表可以为空。
10、如果函数返回了错误的信息,那么错误的信息应该进行测试

MISRA C (3)