- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
超越数据种类的重重圈套
数据种类是编程语言中最基本的组成元素,但倒是最易被忽视的一环,程序员愿意把几乎100%的精力都花在算法研究、程序流控制等大环节上,却极少在数据种类问题上频频商酌。细节决定成败,一个螺丝钉的失误可能致使一个飞
行器的毁坏,一个数据种类的错误相同能够让宏大的软件系统崩溃。MISRA—c中对于数据种类的规则主要分为两个方面。一是数据种类有关的编程风格;二
是不同数据种类之间的变换,后者是要点。这里介绍MISRA_C对于数据
数据种类是编程语言中最基本的组成元素,但倒是最易被忽视的一环,程序员愿意把几乎100%的精力都花在算法研究、程序流控制等大环节上,却极少在数据种类问题上频频商酌。
细节决定成败,一个螺丝钉的失误可能致使一个飞翔器的毁坏,一个数据种类的错误相同能够让宏大的软件系统崩溃。
MISRA—c中对于数据种类的规则主要分为两个方面。一是数据种类相
关的编程风格;二是不同数据种类之间的变换,后者是要点。这里介绍
MISRA_C对于数据种类的部分规则,更多的规则请参照《MISRA-C:2OO4)》一
书。
下文中凡是未加特别说明的都是强迫(required)规则.个别介绍
(advisory)规则加了“介绍”表记。
在睁开阐述以前,先看两个问题,读者能够带着疑问阅读完本章内
容。
问题1:履行以下程序,result_8的值是多少?
ulnt8_tporI=0x5a;
uint8一tresuh_8;
result_8=(~port)4;
/*注:uint8_t表示8位无符号整型*/
问题2:履行以下程序,d的值是多少?
uintl6_ta=10;
uin|16_t
b=6553l;
uint32_t
c=0;
uint32_t
d;
d=a+b+c;
/*注:uintl6_t表示16位无符号整型,uint32_t表示32位无符号整型*/
数据种类有关的编程风格
规则6.3(介绍):一定用typedef显式表记出各数据种类的长度和符号特征,防止直接使用标准数据种类。比如,一个32位的整数系统,可定义以下:
typedef
char
chat_t;
typedef
sigr
led
char
int8_t
;
typedef
signed
short
intl6_t
;
typedef
signed
int
int32_t;
typedef
signedlongint64_t
;
typedef
unsitgned
chat
uint8_t
;
typedefunsignedshortuint16_t;
typedefunsignedintuint32_t;
typedef
unsigned
1ong
uint64_t
;
之因此用intl6_t
和uint32_t
等取代signed
short和
unsigned
int
等标准数据种类表记符,是因为不同的编译器对标准数据种类
的长度定义是不相同的。比方说一个
16位系统,很可能就把short
和int
都定
义成16位,long定义成32位,这与上文32位系统中标准数据种类的长度就不一致。用intl6_t和uint_32等表记符来定义变量,一方面增添了程序的可读性,使得程序员自己或其余读者都能对程序中数据的详细信息胸中有数;另一方面也有助于程序在不同系统之间的移植,节俭开发时间,减少隐患。规则
1:不得使用八进制常数(O除外)或八进制转义符。思虑以下数组:
code[1]=109;code[2]=100;
code[3]=O52
code[4]=O71;
/*注:八进制常数须在最高位加O*/
code[3]的实质值是42(十进制),code[4]的实质值是57(十进制);但预计好多读者会把code[3]认成是52(十进制),code[4]认成是7l(十进制)。
八进制数在C程序中使用的频次远小于十进制数和十六进制数,为了保证程序的可读性和安全性,程序员不同意使用八进制数以及八进制转义
符。
数据种类变换
假如程序员对数据种类的变换有很清楚的认识,而且在必需的地方做
了正确的显式强迫变换,那程序是安全的。但有时因为程序员的大意,或许是
过于相信编译器的“智慧”程度,致使表达式中有好多隐式变换(即没有显式地强迫变换),而这些隐式数据种类变换很可能就组成致命的破绽。MISRA—C中数据种类变换规则的着眼点,即是防止有破绽的隐式数据变换。
在介绍MISRA—C对于数据种类变换的部分规则以前,先介绍整型操作数的“均衡(balance)”原则。所谓整型操作数“均衡”原则,即对于隐式表达
式,编译器会依据既定规则对操作数进行位数扩大,此中int和unsiglledint在整型表达式“均衡”过程中占重要地位。
下边剖析一个简单的隐式整型表达式c=a+b(假定
您可能关注的文档
最近下载
- 2025最新四年级英语阅读理解训练题.docx VIP
- 数字化转型的“黄金”铁三角.docx VIP
- 居民常见恶性肿瘤筛查和预防推荐-2025.pdf VIP
- 教科(2025版)小学科学三年级上册第三单元《物体的运动》知识点总结.docx VIP
- 2024华医网继续教育骨厌氧菌感染的病原学诊断及临床应用题库答案.docx VIP
- 中华诵--国学经典诵读教案-(五年级上册).doc VIP
- 台湾樂氏同仁堂整合傳播方案.pdf VIP
- 第13课 安全记心上 第1课时(教学课件)三年级道德与法治上册(统编版2024秋).pptx
- 杜仲河水库防洪评价(报批稿).DOC VIP
- WJ-7型扣件安装作业指导课件.ppt VIP
原创力文档


文档评论(0)