本规范主要针对单片机编程语言和08编译器而言,包括排版、注释、命名、变量使用、代码可测性、程序效率、质量保证等内容。
6 N! W4 U. S! d# x; c. X- S( r1.基本规则
Y8 l9 e! X/ R格式清晰、注释简明扼要、命名规范易懂、函数模块化、程序易读易维护、功能准确实现、代码空间效率和时间效率高、适度的可扩展性、单片机编程规范-标识符命名
. h( Y; |0 \. C& d2.标识符命名 2.1 命名基本原则 " Q3 W! ], m: j* C
(1)命名清晰明了,有明确含义,使用完整单词或约定俗成的缩写。通常,较短的单词可通过去掉元音字母形成缩写;较长的单词可取单词的头几个字母形成缩写。即"见名知意"。(2)命名风格要自始至终保持一致。 7 [3 V6 S9 h; d* R; o* z) v6 s
(3)命名中若使用特殊约定或缩写,要有注释说明。0 M4 S& M: u# t1 \
(4)同一软件产品内模块之间接口部分的标识符名称之前加上模块标识。. W$ L* Y& {7 P$ P
2.2 宏和常量命名 . P$ P- M% V7 R0 r7 A
宏和常量用全部大写字母来命名,词与词之间用下划线分隔。对程序中用到的数字均应用有意义的枚举或宏来代替。0 ]8 z4 o4 r, A g. s, p" c" |
2.3 变量命名
; @# K' a0 M3 W% [( G/ `* T' H变量名用小写字母命名,每个词的第一个字母大写。类型前缀(u8\s8 etc.)全局变量另加前缀g_。* \) p- a- R E; O8 x- x. m
局部变量应简明扼要。局部循环体控制变量优先使用i、j、k等;局部长度变量优先使用len、num等;临时中间变量优先使用temp、tmp等。+ t. m, p- M! l3 d& n' J0 \5 {' M
2.4 函数命名 & t( R" i" { ?& L. P* _( L
函数名用小写字母命名,每个词的第一个字母大写,并将模块标识加在最前面。
3 W( f& \+ }3 E2.5 文件命名 4 o( i4 a$ S) h5 x' I
一个文件包含一类功能或一个模块的所有函数,文件名称应清楚表明其功能或性质。
0 U1 e+ T% n" j/ n4 {每个.c文件应该有一个同名的.h文件作为头文件。 % H N/ L3 O: h( G6 w7 f
3.注释 3.1 注释基本原则
0 T8 ]# {& G7 v9 B9 T& l" p有助于对程序的阅读理解,说明程序在"做什么",解释代码的目的、功能和采用的方法。! z+ d$ L! A% D1 H5 d8 l7 Z
一般情况源程序有效注释量在30%左右。- P( \/ q3 i- S$ r" R* v
注释语言必须准确、易懂、简洁。# i! f% T# f' o7 [" G. o" f
边写代码边注释,修改代码同时修改相应的注释,不再有用的注释要删除。5 T$ I# K! j- P. E
汇编和C中都用"//",取消";" 不使用段注释" /* */ "(调试时可用)
1 U3 \. t- B3 i& L4 Z7 u1 E5 g" u3.2 文件注释
& D& I/ Q. F. ~& e) Y文件注释必须说明文件名、函数功能、创建人、创建日期、版本信息等相关信息。! z9 A! g2 N3 i. w
修改文件代码时,应在文件注释中记录修改日期、修改人员,并简要说明此次修改的目的。所有修改记录必须保持完整。& ~8 j9 D8 }7 E5 E' m6 S/ m. u/ I8 l0 q
文件注释放在文件顶端,用"/*……*/"格式包含。. z% c# W; Y8 z: z" c3 w
注释文本每行缩进4个空格;每个注释文本分项名称应对齐。
2 o0 o' Y) e, `5 p7 a) H, S/***********************************************************2 `1 a& |( z9 r0 Z2 N
文件名称:1 { z% G6 o l, v- e+ t# c
作 者:
( W. Q" q# M) X+ C版 本:# { s1 R$ f" {* h' S
说 明:$ d: l; F. z2 \ A& z. i
修改记录:
k. P& |, a# V# L! \, R3 m***********************************************************/
( H8 [" T& S( e) v2 u# }6 w6 \3.3 函数注释 1 E: v9 k# X' C# z. O9 y! B8 u
3.3.1 函数头部注释
7 ^/ b2 }, n4 z3 q! k& H函数头部注释应包括函数名称、函数功能、入口参数、出口参数等内容。如有必要还可增加作者、创建日期、修改记录(备注)等相关项目。
+ |) I0 \1 n5 \2 N- @4 x( A! Q p函数头部注释放在每个函数的顶端,用"/*……*/"的格式包含。其中函数名称应简写为Name(),不加入、出口参数等信息。/ L& B# r7 @) d/ k% G T7 G3 j7 b8 f
/***********************************************************; p. Y* Z! U* I. N$ r; l. a, d
函数名称: E1 E6 N& V9 v! n" b0 \
函数功能:
3 n5 }# Z d# i E* q+ ?& U: U入口参数:
7 B; c: H, f4 V2 x出口参数:
; R! K" P' i+ \) {6 F# H备 注:1 }7 q* l/ ]' ~- N7 i% s
***********************************************************/: x8 T* ?9 C) L j5 u% W
3.3.2 代码注释(信、盈、达‘腾讯:以一齐捂捂吧久零久要’)
6 l5 @ B' q8 J* }: n代码注释应与被注释的代码紧邻,放在其上方或右方,不可放在下面。如放于上方则需与其上面的代码用空行隔开。一般少量注释应该添加在被注释语句的行2尾,一个函数内的多个注释左对齐;较多注释则应加在上方且注释行与被注释的语句左对齐。: C k9 }% h2 V/ Q" W" N! d
函数代码注释用"//…//"的格式。* Y5 `! }2 _6 f) e+ ^
通常,分支语句(条件分支、循环语句等)必须编写注释。其程序块结束行"}"的右方应加表明该程序块结束的标记"end of ……", 尤其在多重嵌套时。8 P, r. @ e( Y, J% t$ P
3.4 变量、常量、宏的注释 ( r: }9 Q! m- K3 `6 R
同一类型的标识符应集中定义,并在定义之前一行对其共性加以统一注释。对单个标识符的注释加在定义语句的行尾。+ q4 H; c1 `* ^+ C& j, h; J5 h
全局变量一定要有详细的注释,包括其功能、取值范围、哪些函数或过程存取它以及存取时的注意事项等。. X7 ~% H) {- e) I- q
注释用"//…//"的格式。 6 t* l! C, K) @ k
! m3 k/ @- \( D1 D/ o
|