C/C++编程安全标准GJB-8114解读——类型转换类

GJB-8114是一部嵌入式软件安全测试相关的国家标准,本系列文章我们针对GJB-8114《C/C++语言编程安全子集》的具体内容进行解读。GJB-8114标准规则中一共有124条强制性规则, 是按类分的,一共有13类,声明定义类、版面书写类、指针使用类、分支控制类、跳转控制类、运算处理类、函数调用类、语句使用类、循环控制类、类型转换类、初始化类、比较判断类以及名称、符号与变量使用类、今天我们针对类型转换类进行解读。


类型转换有一个通用性的规则,就是不允许把范围大的数转换成范围小的数。

R-1-10-1
浮点数变量赋给短整数变量必须强制转换


这个首先它有可能会把精度给降低了,再一个有可能把这个数的比较大的部分给舍掉了。如果你保证这些没有问题的情况下,必须用强制的类型转换,直接赋值是不允许的。

虽然强制类型转换也存在精度损失、大数被截掉的问题,但是只要你按照遵循示例这样做了强制类型转换了,就意味着你是知道存在这种风险了,但是你依然要这么做。

R-1-10-2
长整形变量赋值给短整形变量必须强制转换


长整形变量赋值给短整形变量也必须强制转换

R-1-10-3
double型变量赋值给float型变量必须强制转换


这里需要跟大家说一下,在咱们的pc机中好像double和float也没有太大的区别了,都是32位的,应该区别不是太大。违背示例中给出的例子,这个double或者是48位的,或者是64位的,而float就是32位的,所以就不能这样做了。

R-1-10-4
指针变量的赋值类型必须与指针变量类型一致


违背示例中举的例子是,p指针是一个无符号的整型数,后面是把一个无符号的短整型,强制赋给p,这样不行,必须把这个ptr的指针强制转换成无符号的整型数。

R-1-10-5
将指针变量赋予非指针变量或非指针变量赋予指针变量,必须使用强制转换


也就是说我们的指针原则上来说通常情况下是指向一个地址,我们为指针赋地址的时候,一般用常量来赋值,所以要把这个常量指明是一个指针类型。像遵循示例中展示的,ptr是个0,我们要把它转换成一个指针类型,一个无符号的整型。

在咱们的计算机当中,地址总线到底是多少位的,有可能大家不太关心,地址总线有可能是32位的,还有一些是64位的,所以必须做这样的一个转换。如果不这样转换的话,尽管不会出问题,但是有可能让人看起来不舒服。

R-1-10-6
禁止使用无实质作用的类型转换


违背示例中表示的是,已经是一个整型了,还把它强制转换成一个整型,这个算是一个冗余的东西,所以说这样做实际上并不会有什么影响,但是还是不允许这样做。

以上就是C/C++编程安全标准GJB-8114中,类型转换类相关要求的全部内容,如需该标准的全部内容,可私信我获取,欢迎在评论区交流讨论。

本系列内容整理自优品软件培育计划百场前沿技术系列讲座直播第16期,中国航天科技集团公司软件评测中心研究员李国良为大家带来的《白盒测试——C/C++编程规范》专题讲座,他曾参与过多个大型航空、航天、军工、电子型号项目的测试任务,如需直播回放视频也可私信我获取。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值