没有合适的资源?快使用搜索试试~ 我知道了~
技术人员设计程序的首要目的是用于技术人员沟通和交流,其次才是用于机器执行。程序的生命力在于用户使用,程序的成长在于后期的维护及根据用户需求更新和升级功能。如果你的程序只能由你来维护,当你离开这个程序时,你的程序也和你一起离开了,这将给公司和后来接手的技术人员带来巨大的痛苦和损失。因此,为了程序可读、易理解、好维护,你的程序需要遵守一定的规范,你的程序需要设计。“程序必须为阅读它的人而编写,只是顺便用于机器执行。”——HaroldAbelson和GeraldJaySussman“编写程序应该以人为本,计算机第二。”——SteveMcConnell为提高产品代码质量,指导仪表嵌入
资源详情
资源评论
资源推荐
嵌入式嵌入式C编码规范编码规范
0规范制定说明
0.1箴言
技术人员设计程序的首要目的是用于技术人员沟通和交流,其次才是用于机器执行。程序的生命力在于用户使用,程序的成长
在于后期的维护及根据用户需求更新和升级功能。如果你的程序只能由你来维护,当你离开这个程序时,你的程序也和你一起
离开了,这将给公司和后来接手的技术人员带来巨大的痛苦和损失。因此,为了程序可读、易理解、好维护,你的程序需要遵
守一定的规范,你的程序需要设计。
“程序必须为阅读它的人而编写,只是顺便用于机器执行。”
——Harold Abelson 和 Gerald Jay Sussman
“编写程序应该以人为本,计算机第二。”
——Steve McConnell
0.2简介:
为提高产品代码质量,指导仪表嵌入式软件开发人员编写出简洁、可维护、可靠、可测试、高效、可移植的代码,编写了本规
范。
本规范将分为完整版和精简版,完整版将包括更多的样例、规范的解释以及参考材料(what & why),而精简版将只包含规则部
分(what)以便查阅。
在本规范的最后,列出了一些业界比较优秀的编程规范,作为延伸阅读参考材料。
本规范主要包含以下两个方面的内容:
一:为形成统一编程规范,从编码形式角度出发,本规范对标示符命名、格式与排版、注释等方面进行了详细阐述。
二:为编写出高质量嵌入式软件,从嵌入式软件安全及可靠性出发,本规范对由于C语言标准、C语言本身、C编译器及个人
理解导致的潜在危险进行说明及规避。
0.3适用范围:
本规范对嵌入式软件开发起一定的指导作用。
0.4术语定义
0.4.1 规范术语
原则:编程时必须坚持的指导思想。
规则:编程时需要遵循的约定,分为强制和建议(强制是必须遵守的,建议是一般情况下需要遵守,但没有强制性)。
说明:对原则/规则进行必要的解释。
实例:对此原则/规则从正、反两个方面给出例子。
材料:扩展、延伸的阅读材料。
Unspecified:未详细说明的行为,这些是必须成功编译的语言结构,但关于结构的行为,编译器的编写者有某些自由。例如C
语言中的“运算次序”问题。这样的问题有 22 个。 在某种方式上完全相信编译器的行为是不明智的。编译器的行为甚至不会在
所有可能的结构中都是一致的。
Undefined:未定义行为,这些是本质的编程错误,但编译器的编写者不一定为此给出错误信息。相应的例子是无效参数传递
给函数,或函数的参数与定义时的参数不匹配。从安全性角度这是特别重要的问题,因为它们代表了那些不一定能被编译器捕
捉到的错误。
Implementation-defined:实现定义的行为,这有些类似于“unspecified ”问题,其主要区别在于编译器要提供一致的行为并记
录成文档。换句话说,不同的编译器之间功能可能会有不同,使得代码不具有可移植性,但在任一编译器内,行为应当是良好
定义的。比如用在一个正整数和一个负整数上的整除运算“/ ”和求模运算符“% ”。存在76个这样的问题。从安全性角度,假如
编译器完全地记录了它的方法并坚持它的实现,那么它可能不是那样至关重要。尽可能的情况下要避免这些问题。
0.4.2 C语言相关术语
声明(declaration):指定了一个变量的标识符,用来描述变量的类型,是类型还是对象,
者函数等。声明,用于编译器(compiler)识别变量名所引用的实体。以下这些就是声明:
extern int bar;
extern int g(int,int);
double f(int,double);[对于函数声明,extern关键字是可以省略的。]
定义(definition):是对声明的实现或者实例化。连接器(linker)需要它(定义)来引用内存实体。与上面的声明相应的定义如
下:
int bar;
int g(int lhs,int rhs) {returnlhs*rhs;}
double f(int i,double d) {returni+d;}
0.5规则的形式
规则/原则<序号>(规则类型):规则内容。
[原始参考]
<序号>:每条规则都有一个序号,序号是按照章节目录-**的形式,从数字1开始。例如,若在此章节有个规则的话,序号为
0.5-1。
(规则类型):或者是‘强制’,或者是‘建议’。
规则内容:此条规则的具体内容。
[原始参考]:指示了产生本条款或本组条款的可应用的主要来源。
1标示符命名规则
1.1标示符命名总则
规则1.1-1(强制):标识符(内部的和外部的)的有效字符不能多于31。
[UndefinedImplementation-defined]
说明:ISO 标准要求在内部标识符之间前31 个字符必须是不同的,外部标识符之间前6 个字符必须是不同的(忽略大小写)
以保证可移植性。我们这里放宽了此要求,要求内部、外部标示符的有效字符不能多于31即可。这样主要是便于编译器识
别,代码清晰易读,并保证可移植性。
规则1.1-2(强制):具有内部作用域的标识符不应使用与具有外部作用域的标识符相同的
名称,在内部作用域里具有内部标示符会隐藏外部标识符。
说明:外部作用域和内部作用域的定义如下。文件范围内的标识符可以看做是具有最外部
(outermost )的作用域;块范围内的标识符看做是具有更内部(more inner)的作用域,连续嵌套的块,其作用域更深入。
如果内部作用域标示符和外部作用域标示符同名,内部作用域标示符会覆盖外部作用域标示符,导致程序混乱。
实例:
规则1.1-3(建议):具有静态存储期的对象或函数标识符不能重用。
说明:不管作用域如何,具有静态存储期的标识符都不应在系统内的所有源文件中重用。它包含带有外部链接的对象或函数,
及带有静态存储类标识符的任何对象或函数。在一个文件中存在一个具有内部链接的标识符,而在另外一个文件中存在着具有
外部链接的相同名字的标识符,或者存在两个标示符相同的外部标示符。对用户来说,这有可能导致混淆。
实例:
test1.c
test2.c
原则1.1-4(强制):标识符的命名要清晰、明了,有明确含义,同时使用完整的单词或大家基本可以理解的缩写,避免使人产生
误解。
说明:标示符的命名尽量做到见名知意,尽量让别人快速理解你的代码。
实例:
好的命名方法:
不好的命名方法:
原则1.1-5(强制):常见通用的单词缩写尽量统一,不得使用汉语拼音、英语混用。
说明:简短的单词可以使用略去‘元音’字母形成缩写,较长的单词可以使用音节首字母
者单词前几个字母形成缩写,针对大家公认的单词缩写要统一。对于特定的项目要使
用的专有缩写应该注明或者做统一说明。
实例:常见单词缩写表(建议):
原则1.1-6(建议):用正确的反义词组命名具有互斥意义的变量或相反动作的函数等。
实例:常见反义词表:
原则1.1-7(建议):标示符尽量避免使用数字编号,除非逻辑上需要。
实例:
应改为更有意义的定义:
材料:《代码大全第2版》(Steve McConnell 著 金戈/汤凌/陈硕/张菲 译 电子工业出版社
2006年3月)"第11章变量命的力量"。
1.2文件命名及存储规则
规则1.2-1(强制):文件名使用小写字母。
剩余14页未读,继续阅读
weixin_38743602
- 粉丝: 394
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0