|
EDA365欢迎您!
您需要 登录 才可以下载或查看,没有帐号?注册
x
现在单片机的程序设计,C51已经得到广泛的推广和应用,算是单片机的主流设计程序,甚至可以说作为单片机开发人员必须要掌握的一门语言了。
4 t% X0 A9 ^# K$ Z5 |' Z8 @/ J& N6 a% F4 x
作为一门工具,最终的目的就是实现功能。在满足这个前提条件下,我们希望我们的程序能很容易地被别人读懂,或者能够很容易地读懂别人的程序,在团体合作开发中就能起到事半功倍之效。在网上请求帮助时,如能以规范的写法贴出程序,网友会比较容易地明白你的问题,则会比较快的得到网友的帮助,否则让人看上半天也不明所以然,这样就达不到预期的效果了。因此,为了便于源程序的交流,减少合作开发中的障碍,希望大家能够探讨一下C51的编程规范。把各人认为好的建议提出来,然后做一个总结,作为一种大家一致认同的规范,我认为将会是一件很有意义的事。我先提出一些自已的想法,以此抛砖引玉。
6 T6 j2 k8 O' N& q$ [! b7 K- @7 G/ R7 j4 Z7 q
一、注释& z! t2 p3 T* Q4 }
/ _2 N4 I4 R& C3 u% e. n
1,采用中文;
1 [! I3 E/ q8 Y% M8 S2,开始的注释:( ]0 \5 C5 d4 _) p( n2 K r5 c' R M
! z. A. H1 x5 t$ i: F+ `; m9 ^文件(模块)注释内容:
0 u. p" P0 r2 E# U0 a公司名称、版权、作者名称、修改时间、模块功能、背景介绍等,复杂的算法需要加上流程说明;
$ n3 V& Q3 x+ z, B# h* B4 q
+ j8 T0 c$ \6 [4 @6 b比如:/ s9 T) B8 d0 X$ C6 C; `( r% B- ^
/*********************************************************************/* m! x0 \ N1 f$ ?
/*公司名称: */
% H/ K8 ^( s1 q2 T
, H# h' E! W* E4 F" R/*模 块 名: LCD 模块 LCD 型号:HD44780 */
' ]& u8 v4 v" J- P+ o+ W4 S& k7 N: c. l0 f) Q
/*创 建 人:zhaojunjie 日期:2001-06-08 */
2 Y8 ~: e4 w1 \9 }/*修 改 人: 日期:2001-06-08 */ 3 I3 t H. }) r$ B- {) t
/*功能描述: */: E/ h8 z' M0 o$ m9 N5 E2 [$ Y3 h
/*其他说明: */4 m* b; T8 }# }8 z. g, k6 w
/*版 本:
/ H! t7 ]2 l/ _/**********************************************************************/
! U( b; w/ M8 |1 ^" ^. c( E! _2 X# i; \& \7 k
函数开头的注释内容:4 i! a0 L- L7 e3 r
函数名称、功能、说明 输入、返回、函数描述、流程处理、全局变量、调用样例等,复杂的函数需要加上变量用途说明;/ G5 ^ A5 t6 Z$ i
! ^! K* e4 q3 U) o/ n; R9 e' O1 }
/*********************************************************************
; v' x6 c. c, v* m5 {, m*
9 V, w7 ~( k5 ]- n; N7 s* 函 数 名: v_LcdInit0 T1 [- S7 F {3 I
* 功能描述: LCD初始化
9 h0 w9 {* A; F! u0 w5 n' F* 函数说明: 初始化命令:0x3c, 0x08, 0x01, 0x06, 0x10, 0x0c
6 o3 n5 [# r& i6 r Q& Q* 调用函数: v_Delaymsec(),v_LcdCmd(). x! \6 X8 ? g! f
* 全局变量:
$ N1 Q. c+ N$ o" G- \( U( i# ~6 R* 输 入: 无
. i8 E$ T7 Y6 v& V! z* 返 回: 无0 j/ B0 o( c3 c3 F" a- J+ q1 b/ i
* 设 计 者:zhao 日期:2001-12-09
. J; `2 d: l9 {. L: [* 修 改 者:zhao 日期:2001-12-09
6 `+ Y! H" Q- Y: J$ H* 版 本:
' E4 M; d- x( e7 G% j***********************************************************************/
- ]$ \; I3 G" s0 p' {- e9 V- K+ `3 j
0 d5 e3 D) o. l1 Z3、程序中的注释内容:: |& G1 Q J- D) z2 J- O. d
; D$ Z- r% ^% h9 g- n: t5 r
修改时间和作者、方便理解的注释等。注释内容应简炼、清楚、明了,一目了然的语句不加注释。
2 N3 T) X0 G' z+ e I, {; c* y( W
0 s9 @+ d( H3 y二、命名:
$ Y2 s5 J* Y/ ` k4 Q! O; W0 p7 k0 \/ \ H( {% b
命名必须具有一定的实际意义。
) }2 L6 j- V2 O- d4 G. h; w6 ~! ~* s( U* r) U2 u
1、常量的命名:全部用大写。
3 T$ v. d% m7 l& L R9 \
* x+ R9 B( p0 }% p2、变量的命名:: O* S2 I3 q6 U/ `
变量名加前缀,前缀反映变量的数据类型,用小写,反映变量意义的第一个字母大写,其他小写。 ; k) Q8 }4 K& S) D8 x: k8 B. u% ]. a
其中变量数据类型:! p- N# b; }9 l& m
unsigned char 前缀 uc signed char 前缀 sc # v: b% C) N6 ^/ @
unsigned int 前缀 ui signed int 前缀 si
) Z& g {; M* n+ @: a' Hunsigned long 前缀 ul signed long 前缀 sl
( C) B5 g) M( L( P9 Dbit 前缀 b 指针 前缀 p
, P5 f b r2 z/ n- q4 G' K! \9 z, g' z( K
例:ucReceivData 接收数据5 j& D) Z8 U% Y7 _- q
3、结构体命名:4 Y$ ]+ ?0 Q0 \+ U0 N/ V7 L& ^
, j7 p) F/ q3 B- e3 D. k7 `& y
4、函数的命名:
[8 G6 v! k0 X5 V& ]% L函数名首字大写,若包含有两个单词的每个单词首字母大写。
6 B! O% d Y6 n$ C! Q# S$ H9 o7 m函数原型说明包括:引用外来函数及内部函数,外部引用必须在右侧注明函数来源: 模块名及文件名, 内部函数,只要注释其定义文件名;
! ?$ R: L! R( D3 k! B- w9 F$ H7 Y8 Z8 U. s
三、编辑风格
3 c' D' O: [2 U7 ]9 J& Y+ O/ y- U% ^; Q: y
1、缩进:缩进以 Tab 为单位,一个 Tab 为四个空格大小。预处理语句、全局数据、函数原型、标题、附加说明、函数说明、标号等均顶格书写。语句块的“{”“}”配对对齐,并与其前一行对齐;
1 A g$ Z+ g( T1 P5 x* Z$ a8 }0 G+ w
3 I! O. K; y2 _1 Y8 l2、空格:数据和函数在其类型,修饰名称之间适当空格并据情况对齐。关键字原则上空一格,如: Y! v" c" ^6 [5 B5 V
if ( ... ) 等,运算符的空格规定如下:“->”、“[”、“]”、“++”、“--”、“~”、“!”、“+”、“-”(指正负号),“&”(取址或引用)、“*”(指使用指针时)等几个运算符两边不空格(其中单目运算符系指与操作数相连的一边),其它运算符(包括大多数二目运算符和三目运算符“?:”两边均空一格,“(”、“)”运算符在其内侧空一格,在作函数定义时还可据情况多空或不空格来对齐,但在函数实现时可以不用。“,”运算符只在其后空一格,需对齐时也可不空或多空格,对语句行后加的注释应用适当空格与语句隔开并尽可能对齐。# Z: _) _) x- l* T% {
( g$ A" z: `0 e1 C, |3、对齐:原则上关系密切的行应对齐,对齐包括类型、修饰、名称、参数等各部分对齐。另每一行的长度不应超过屏幕太多,必要时适当换行,换行时尽可能在“,”处或运算符处,换行后最好以运算符打头,并且以下各行均以该语句首行缩进,但该语句仍以首行的缩进为准,即如其下一行为“{”应与首行对齐。4 s( f6 g5 O* c/ c
( e9 j, O# G2 Y2 P; }4、空行:程序文件结构各部分之间空两行,若不必要也可只空一行,各函数实现之间一般空两行
2 |- }% } d$ l' A9 `
4 _. [% S: O" m; z9 T6 B0 b5、修改:版本封存以后的修改一定要将老语句用/* */ 封闭,不能自行删除或修改,并要在文件及函数的修改记录中加以记录。
2 h2 y0 K3 X$ v
+ J- ^! s+ \7 \* a6、形参:在定义函数时,在函数名后面括号中直接进行形式参数说明,不再另行说明。 |
|