本规范主要针对单片机编程语言和08编译器而言,包括排版、注释、命名、变量使用、代码可测性、程序效率、质量保证等内容。 $ T8 S9 z9 W1 Y0 q4 t
1.基本规则
) Z3 z/ d7 l& R* y G2 X- C2 N格式清晰、注释简明扼要、命名规范易懂、函数模块化、程序易读易维护、功能准确实现、代码空间效率和时间效率高、适度的可扩展性、单片机编程规范-标识符命名 1 k% y+ o3 b8 E! |( p
2.标识符命名 2.1 命名基本原则
! F$ Y: ]1 @1 M0 x(1)命名清晰明了,有明确含义,使用完整单词或约定俗成的缩写。通常,较短的单词可通过去掉元音字母形成缩写;较长的单词可取单词的头几个字母形成缩写。即"见名知意"。(2)命名风格要自始至终保持一致。
* P+ | z( w+ d) v(3)命名中若使用特殊约定或缩写,要有注释说明。% E8 a# V' n; q( f8 M
(4)同一软件产品内模块之间接口部分的标识符名称之前加上模块标识。7 s, e. d2 T* l$ M! s
2.2 宏和常量命名 6 N9 G% U3 |8 }( M
宏和常量用全部大写字母来命名,词与词之间用下划线分隔。对程序中用到的数字均应用有意义的枚举或宏来代替。
; o" P: j2 i9 h. U2.3 变量命名
7 }7 q, H3 k1 G& Q# w7 S& {$ \6 j# w变量名用小写字母命名,每个词的第一个字母大写。类型前缀(u8\s8 etc.)全局变量另加前缀g_。
) @8 a- o; ^4 M; z* D局部变量应简明扼要。局部循环体控制变量优先使用i、j、k等;局部长度变量优先使用len、num等;临时中间变量优先使用temp、tmp等。
6 h; p2 a; W4 V5 T/ Z2 [4 h/ B' ~1 a3 s2.4 函数命名
9 W. x% l( F+ B" Q3 S函数名用小写字母命名,每个词的第一个字母大写,并将模块标识加在最前面。, M' l9 Z% p* z5 N
2.5 文件命名
9 @- H7 A# t- j' `* M0 o一个文件包含一类功能或一个模块的所有函数,文件名称应清楚表明其功能或性质。# e' S" r V: d& J; d* G6 |/ j1 H& w9 Y
每个.c文件应该有一个同名的.h文件作为头文件。 & I5 N- D5 K! M
3.注释 3.1 注释基本原则 / w- H" l1 M. N$ X
有助于对程序的阅读理解,说明程序在"做什么",解释代码的目的、功能和采用的方法。! ?, b. w$ i0 J+ r. m6 d- ?3 o% c: P
一般情况源程序有效注释量在30%左右。
2 i4 b$ o6 s9 U+ z注释语言必须准确、易懂、简洁。$ ?2 ?) K0 @. L K6 a
边写代码边注释,修改代码同时修改相应的注释,不再有用的注释要删除。
/ ?6 X5 {' p$ n5 q$ C. G汇编和C中都用"//",取消";" 不使用段注释" /* */ "(调试时可用) 0 L. e0 \. A7 `; J# w. P! O
3.2 文件注释
: [3 p6 A# @: k文件注释必须说明文件名、函数功能、创建人、创建日期、版本信息等相关信息。! C0 y7 u/ c) Q+ r) c- R F3 P
修改文件代码时,应在文件注释中记录修改日期、修改人员,并简要说明此次修改的目的。所有修改记录必须保持完整。
& ]0 t9 Q1 P- X) j9 v8 o. i文件注释放在文件顶端,用"/*……*/"格式包含。* |: r. y. j3 D4 B* h4 A0 H
注释文本每行缩进4个空格;每个注释文本分项名称应对齐。( e ` y0 u/ e& `4 n) c0 E c# ?
/***********************************************************1 [: S; T. }8 h2 u
文件名称:& L0 d$ Z! V2 _* m1 ~# |3 D
作 者:! A( K! f9 O. ]+ l+ H, R# P
版 本:
9 h+ x: j% w6 Z* D% y1 @说 明:
: T* U7 q& R. x3 h修改记录:5 y# l: c2 l, K# T0 G. x
***********************************************************/$ M7 P) K: h1 a' b
3.3 函数注释
: z5 I4 t0 y, t$ o% A, \3.3.1 函数头部注释
* b8 [" Q8 y3 R- d函数头部注释应包括函数名称、函数功能、入口参数、出口参数等内容。如有必要还可增加作者、创建日期、修改记录(备注)等相关项目。; y* ?& r! @1 F" i
函数头部注释放在每个函数的顶端,用"/*……*/"的格式包含。其中函数名称应简写为Name(),不加入、出口参数等信息。
' D; A, Y# C; F) J/***********************************************************1 X$ Y1 H5 g* o( P
函数名称:
) E, [ B5 V% k& b9 Q. J$ F函数功能:9 D+ F) q/ P, L* _0 ^) F2 S" l a
入口参数:* _# @. T y$ {: U
出口参数:) C8 h1 b# u" T, ^ {: B
备 注:. e4 u& i1 [: x8 F
***********************************************************/' q4 I! }7 Y, e6 h6 Q1 c+ @7 k; T
3.3.2 代码注释(信、盈、达‘腾讯:以一齐捂捂吧久零久要’)8 c1 ^/ I* _: [/ t
代码注释应与被注释的代码紧邻,放在其上方或右方,不可放在下面。如放于上方则需与其上面的代码用空行隔开。一般少量注释应该添加在被注释语句的行2尾,一个函数内的多个注释左对齐;较多注释则应加在上方且注释行与被注释的语句左对齐。5 B& p) d( h' i5 s
函数代码注释用"//…//"的格式。
+ z# J( ?/ @9 k0 p通常,分支语句(条件分支、循环语句等)必须编写注释。其程序块结束行"}"的右方应加表明该程序块结束的标记"end of ……", 尤其在多重嵌套时。+ g$ X7 ?) d1 r0 [0 ?; U! l$ t
3.4 变量、常量、宏的注释
- P& o8 ^/ u$ r- ^1 `同一类型的标识符应集中定义,并在定义之前一行对其共性加以统一注释。对单个标识符的注释加在定义语句的行尾。
# K Y# n8 t4 N4 p3 p全局变量一定要有详细的注释,包括其功能、取值范围、哪些函数或过程存取它以及存取时的注意事项等。
v0 w* n e3 r! C2 ^' d注释用"//…//"的格式。
4 ^/ @3 b. x; W) G9 x & ?$ W) ^4 Q* l$ y. q2 d
|