MISRA C指导指南解读系列9(MISRA C规则101-113)
来源:互联网 发布:node.js实战第二季 编辑:程序博客网 时间:2024/05/16 06:35
2.1. 指针和数组
101.不能对指针进行算术操作(A)
本条的目的是为了防止指针指向无效的内存空间。例如
void myfunc(void)
{
int *a;
int *b;
int arr[10];
a = arr;
a ++; /* 与规则冲突 */
a --; /* 与规则冲突 */
b = a+1; /* 与规则冲突 */
}
102.不能使用多余两层的间接寻址方式(A)例如:
struct my_struct {
int **p; /*与规则冲突 */
}
struct my_struct ** myfunc1(void) /*与规则冲突 */
{
...
}
struct my_struct * myfunc2(struct my_struct **avg) /*与规则冲突 */
{
...
}
103.关系运算不能用于指针类型,除非两个操作数是一样的类型并且指向相同的数组,结构体或联合体(R)这里的关系运算符不包含==和!=
void myfunc(void)
{
int *p1;
int *p2
int tab1[10];
int tab2[10];
p1 = tab1;
p2 = tab2;
if(p1 > p2) { /* 与规则冲突 */
...
}
}
104.非常数的函数指针不能使用(R)
非常数也就是指该值是在程序运行期间通过一些列计算得到的。如果该值是在程序编译时或者是一固定常数,则可以使用。
105.由一个函数指针指向的所有函数应该在参数的个数,类型和返回值上有区别(R)
这主要是便于区分函数。
106.动态存储的对象地址不能赋给那些即使对象已经是否但是其依然存在的对象(R)
int* globalvar;
int globalvar2;
void foo () {
int x=0;
globalvar=&x; // violation
globalvar2=x; // ok
}
107.空指针不能被废弃(R)
即在指针使用前应判断其值是否是NULL。
2.2. 结构体和联合体
108.在结构体和联合体的规范中,结构体和联合体的所有成员应该都要详细说明或定义(R)
例如:
struct my_struct {
int a;
}
struct com_strcut {
struct my_struct s1;
struct your_struct s2; /* 与规则相冲突 */
int b;
}
109.重叠的变量存储不能使用(R)也就是不准使用Union
110.联合体不能被用来访问大数据类型的子部分(R)
如果遵循规则109,该条就不用考虑。实际上该规则是针对下面的情况。
union my_union{
char c;
short int s;
int a;
}
111.位域只能用unsigned int 或signed int定义(R)enum E_TAG { E1, E2};
112.采用signed int的位域类型至少2位长(R)
struct my_struct
{
unsigned char f1:2; /* 与规则111冲突 */
unsigned short f2:2; /* 与规则111冲突 */
unsigned long f3:2; /* 与规则111冲突 */
unsigned int f4:2; /* OK */
signed int f5:1; /* 与规则112冲突 */
enum E_TAG f8:2; /* 与规则111冲突 */
};
113.结构体和联合体的所有成员都应该命名并且只能通过它们的名字进行访问(R)
- MISRA C指导指南解读系列9(MISRA C规则101-113)
- MISRA C指导指南解读系列3(MISRA C规则11-19)
- MISRA C指导指南解读系列4(MISRA C规则20-32)
- MISRA C指导指南解读系列5(MISRA C规则33-45)
- MISRA C指导指南解读系列6(MISRA C规则46-67)
- MISRA C指导指南解读系列7(MISRA C规则68-86)
- MISRA C指导指南解读系列8(MISRA C规则87-100)
- MISRA C指导指南解读系列10(MISRA C规则114-127)
- MISRA C指导指南解读系列2(MISRA 规则 1- 10)
- MISRA C指导指南解读系列1(MISRA C是什么)
- MISRA-C 2004 规则解读(101S-120S)
- MISRA C (3)
- MISRA-C 2004 规则解读(1S-20S)
- MISRA-C 2004 规则解读(21S-40S)
- MISRA-C 2004 规则解读(41S-60S)
- MISRA-C 2004 规则解读(61S-80S)
- MISRA-C 2004 规则解读(81S-100S)
- MISRA-C 2004 规则解读(121S-140S)
- [转载]《我的青春谁做主》经典台词
- CSS3 备受期待的 8 大功能
- 全选并改变TR颜色
- C与C++对__declspec(dllimport)和__declspec(dllexport)标志符号不同处理
- 使用StringBulder
- MISRA C指导指南解读系列9(MISRA C规则101-113)
- 术语:纤程(fiber)不是轻量级线程
- 作品展之----短/彩信内部群发系统
- 问题:VS2005和VS2008开发环境,安装IE8以后,无法创建 VC++ Smart Device Project?
- 测试用例的基本格式
- 网站
- 敏捷外包的14条原则
- 三国历史上最不该被埋没的十大人才!
- JFreeChart转载笔记