01
汽车软件与C语言
1
C是弱类型语言
在下面代码中,char类型和int类型是可以直接运算的,因为char类型会被提升为int,这就是C中的隐式类型转换,将精度较小的转换为大精度的,在这个意义上讲,它并不符合强类型语言的定义。
#include
int main(void){
char a='a';
int b=10;
int c=a+b;
return 0;
}
2
C有更多操作符及优先级
C相较于其他的语言有更多的操作符,因此其也有更多不同的操作符优先级,其中的大多数都不是能直观判断的,所以通常会被程序员误解。
3
C程序一般不为常见问题
提供运行时检查
C程序一般不为常见问题提供运行时检查,例如运算异常(如零除),溢出,指针的有效性或者数组越界。
02
MISRA C编码规范
03
MISRA C:2012规则介绍
01
Dir 4.12:动态内存分配不应被使用。
图1 Dir 4.12规则
原理:任何库的动态内存分配和进程的释放都可能导致未定义的行为。
02
Rule 10.3:表达式的值不应分配给具有较窄基本类型或不同基本类型类别的对象。
图2 Rule 10.3规则
原理:C语言允许程序员有相当大的自由度,并允许自动形成不同算术类型之间的赋值。然而,使用这些隐式转换可能会导致意外的结果,可能会丢失值、符号或精度。如MISRA基本类型模型所强制的,使用更强的类型可以降低这些问题发生的可能性。
04
MISRA C:2012规则分类
05
Helix QAC与MISRA C:2012