本规范主要针对单片机编程语言和08编译器而言,包括排版、注释、命名、变量使用、代码可测性、程序效率、质量保证等内容。
" f! k7 B# {8 S. f D$ q/ i1 w/ p0 |1.基本规则
' B- V! F, s. j5 }5 z6 Z3 n格式清晰、注释简明扼要、命名规范易懂、函数模块化、程序易读易维护、功能准确实现、代码空间效率和时间效率高、适度的可扩展性、单片机编程规范-标识符命名 $ m6 P0 \: z! A7 R) n* a
2.标识符命名 2.1 命名基本原则
- W# b! y3 U! x(1)命名清晰明了,有明确含义,使用完整单词或约定俗成的缩写。通常,较短的单词可通过去掉元音字母形成缩写;较长的单词可取单词的头几个字母形成缩写。即"见名知意"。(2)命名风格要自始至终保持一致。
0 o' h3 a5 m2 s# N(3)命名中若使用特殊约定或缩写,要有注释说明。7 k6 z" v, y( b8 Z
(4)同一软件产品内模块之间接口部分的标识符名称之前加上模块标识。
6 }, f$ z8 N3 [; w# ?" p2.2 宏和常量命名 , e9 h" `" G% C+ `& Y1 u
宏和常量用全部大写字母来命名,词与词之间用下划线分隔。对程序中用到的数字均应用有意义的枚举或宏来代替。
) U0 W4 H8 Z8 [; j' h5 o# p2.3 变量命名
( q' e' J$ m: D1 S3 K7 O! E+ D变量名用小写字母命名,每个词的第一个字母大写。类型前缀(u8\s8 etc.)全局变量另加前缀g_。( C2 U/ ?4 E- }! K) q
局部变量应简明扼要。局部循环体控制变量优先使用i、j、k等;局部长度变量优先使用len、num等;临时中间变量优先使用temp、tmp等。
' _2 ^# T7 V8 t2.4 函数命名
: T/ B3 o8 i$ v. H5 i3 o( x函数名用小写字母命名,每个词的第一个字母大写,并将模块标识加在最前面。# J# W/ ^2 ^# k8 t8 J
2.5 文件命名
# J% |1 g$ l/ r9 p) F- m一个文件包含一类功能或一个模块的所有函数,文件名称应清楚表明其功能或性质。
' o! Z2 u" W& h% U9 y9 N每个.c文件应该有一个同名的.h文件作为头文件。
( x* q. m- D3 d+ i0 D8 r3.注释 3.1 注释基本原则
& E" w! ~' k2 h4 D; M: x- N有助于对程序的阅读理解,说明程序在"做什么",解释代码的目的、功能和采用的方法。# p9 ?* \% K, v8 k
一般情况源程序有效注释量在30%左右。" w; z0 j* O) M8 J" N8 U* z/ b
注释语言必须准确、易懂、简洁。
5 v" O# e/ M9 z3 H) `边写代码边注释,修改代码同时修改相应的注释,不再有用的注释要删除。* D5 j) ^0 [( f9 `
汇编和C中都用"//",取消";" 不使用段注释" /* */ "(调试时可用) , R! Q0 o# B: G7 m7 F
3.2 文件注释
& ]& [" U, q* \" c5 u* M# N, O文件注释必须说明文件名、函数功能、创建人、创建日期、版本信息等相关信息。3 L0 W' ^2 u1 Q$ Z8 d7 R
修改文件代码时,应在文件注释中记录修改日期、修改人员,并简要说明此次修改的目的。所有修改记录必须保持完整。+ \5 X4 X- l; `' {6 N ], P% C
文件注释放在文件顶端,用"/*……*/"格式包含。- a. c, B M# j. Z. M6 l" ^1 |/ }
注释文本每行缩进4个空格;每个注释文本分项名称应对齐。7 c: ?* k, a" X! K% Y
/***********************************************************
/ ^# ]; O8 }, L5 i( r文件名称:3 |* i8 h* w. m e2 ?
作 者:4 `! _: W4 B$ x% S1 d4 C3 S1 `
版 本:# f( Y- q* d5 G4 ~
说 明:
?' b! u/ J: V0 e3 k# K; d2 J修改记录:: i U" p5 v2 d8 }" H4 Z; w& ]
***********************************************************/; X( F- v4 P: l7 ]" `
3.3 函数注释
8 h4 L) v5 g& t# ]0 @. O3 O( q7 `3.3.1 函数头部注释* D6 C$ ?- o" |3 C# u- U
函数头部注释应包括函数名称、函数功能、入口参数、出口参数等内容。如有必要还可增加作者、创建日期、修改记录(备注)等相关项目。
" ]5 k2 l! j- k) h$ h$ ^函数头部注释放在每个函数的顶端,用"/*……*/"的格式包含。其中函数名称应简写为Name(),不加入、出口参数等信息。4 G# X) P% k! k
/***********************************************************
4 J6 K/ a, i! ~& f- W函数名称:/ E) V. \# y' I- S3 g
函数功能:
+ N# O8 d* x |7 u; @2 T0 Q5 Z入口参数:. _" P6 z# }8 ?% ]" {+ o8 J5 {8 E2 J
出口参数:
5 ^; C4 M% G. n6 c$ g6 a备 注:8 R- I, M" ~5 u1 n/ T
***********************************************************/0 e- _, p5 E I" a, s- H
3.3.2 代码注释(信、盈、达‘腾讯:以一齐捂捂吧久零久要’)% y( F* @! q& a
代码注释应与被注释的代码紧邻,放在其上方或右方,不可放在下面。如放于上方则需与其上面的代码用空行隔开。一般少量注释应该添加在被注释语句的行2尾,一个函数内的多个注释左对齐;较多注释则应加在上方且注释行与被注释的语句左对齐。
9 l% T" T, Y. t函数代码注释用"//…//"的格式。: k/ H) _0 Q& q( [
通常,分支语句(条件分支、循环语句等)必须编写注释。其程序块结束行"}"的右方应加表明该程序块结束的标记"end of ……", 尤其在多重嵌套时。- X- E& y' H @& j
3.4 变量、常量、宏的注释
5 D: g' n* Q3 T( f% B) H* b同一类型的标识符应集中定义,并在定义之前一行对其共性加以统一注释。对单个标识符的注释加在定义语句的行尾。
4 D. k7 ?4 s' c* L" r' o, q X全局变量一定要有详细的注释,包括其功能、取值范围、哪些函数或过程存取它以及存取时的注意事项等。) F! G- \7 {+ j y/ _, g9 h2 ^$ g0 ^
注释用"//…//"的格式。
0 [5 V- \9 q8 C! p1 J& {5 t , x; E0 I2 R, P0 _9 S/ h
|