MISRA C-2012准则之初始化

目录

一、MISRA C简介

二、初始化

2.1、正确的初始化示例

2.1.1、自动变量初始化

2.1.2、结构体初始化

2.1.3、数组初始化

2.1.4、联合体初始化

2.2、错误示例

2.2.1、未初始化的自动变量

2.2.2、结构体部分初始化

2.2.3、数组部分初始化

2.2.4、重复初始化

2.2.5、未指定大小的数组初始化

三、注意事项


相关文章如下:

1、《MISRA C-2012准则之标准C环境准则

2、《MISRA C-2012准则之未使用的代码的处理

3、《MISRA C-2012准则之注释

4、《MISRA C-2012准则之标识符

5、《MISRA C-2012准则之常量

6、《MISRA C-2012准则之声明与定义

7、《MISRA C-2012准则之初始化

8、《MISRA C-2012准则之基本数据类型

9、《MISRA C-2012准则之指针类型转换

10、《MISRA C-2012准则之表达式

一、MISRA C简介

MISRA C是由汽车产业软件可靠性协会(MISRA)提出的C语言开发标准。其目的是在增进嵌入式系统的安全性及可移植性。

MISRA C一开始主要是针对汽车产业,不过其它产业也逐渐开始使用MISRA C:包括航天、电信、  国防、医疗设备、铁路等领域中都已有厂商使用MISRA C。

MISRA C的第一版是在1998年发行,一般称为MISRA-C:1998。在2004年时发行了第二版的MISRA C,称作MISRA-C:2004。2012年发布第三版,为当前最新有效的C语言规范版本,称为MISRA-C:2012。 MISRA C不能100%保证程序不出问题,但是能尽可能的预防,总结一下,基本上使用MISRA C具有以下五个维度的优势:

1、提升可靠性

2、提升可读性

3、提升可移植性

4、提升可维护性

5、提升安全性

二、初始化

2.1、正确的初始化示

2.1.1、自动变量初始

int main() {
    int a = 0;  // 强制初始化
    float b = 0.0f;
    char c = '\0';
    return 0;
}

2.1.2、结构体初始

struct Point {
    int x;
    int y;
};

int main() {
    struct Point p = {0, 0};  // 必需在大括号内初始化
    return 0;
}

2.1.3、数组初始

int main() {
    int arr[5] = {0};  // 全部初始化为0
    int arr2[3] = {1, 2, 3};  // 明确指定大小并完全初始化
    return 0;
}

2.1.4、联合体初始

union Data {
    int i;
    float f;
};

int main() {
    union Data d = {0};  // 初始化第一个成员
    return 0;
}

2.2、错误示例

2.2.1、未初始化的自动变

int main() {
    int a;  // 错误:使用前未初始化
    printf("%d", a);
    return 0;
}

2.2.2、结构体部分初始

struct Point {
    int x;
    int y;
};

int main() {
    struct Point p = {0};  // 错误:只初始化了x,y未初始化
    return 0;
}

2.2.3、数组部分初始

int main() {
    int arr[5] = {1, 2};  // 错误:部分初始化
    return 0;
}

2.2.4、重复初始

int main() {
    int a = 0;
    a = 1;  // 错误:重复初始化(如果a已经通过声明初始化过)
    return 0;
}

2.2.5、未指定大小的数组初始

int main() {
    int arr[] = {1, 2, 3};  // 错误:未明确指定大小(虽然编译器会推断,但不符合规范)
    return 0;
}

三、注意事项

  • C99及以上版本中,可以使用 int arr[] = {1, 2, 3}; 让编译器推断数组大小,但严格遵循规范时应明确指定大小
  • 结构体和联合体的初始化必须包含所有成员或明确指定初始化的成员
  • 避免在初始化后再次为同一变量赋值,除非有明确的逻辑需求
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

EmbSW_Guru_Wx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值