EDA365电子工程师网
标题:
谈谈C51的编程规范
[打印本页]
作者:
Hh0203
时间:
2016-8-9 15:43
标题:
谈谈C51的编程规范
现在单片机的程序设计,C51已经得到广泛的推广和应用,算是单片机的主流设计程序,甚至可以说作为单片机开发人员必须要掌握的一门语言了。
& N% G4 Z6 |% ?% {( x+ [
J2 E: N: z' @& E% M0 l( ?
作为一门工具,最终的目的就是实现功能。在满足这个前提条件下,我们希望我们的程序能很容易地被别人读懂,或者能够很容易地读懂别人的程序,在团体合作开发中就能起到事半功倍之效。在网上请求帮助时,如能以规范的写法贴出程序,网友会比较容易地明白你的问题,则会比较快的得到网友的帮助,否则让人看上半天也不明所以然,这样就达不到预期的效果了。因此,为了便于源程序的交流,减少合作开发中的障碍,希望大家能够探讨一下C51的编程规范。把各人认为好的建议提出来,然后做一个总结,作为一种大家一致认同的规范,我认为将会是一件很有意义的事。我先提出一些自已的想法,以此抛砖引玉。
8 _$ \( P2 ]! W- h2 ^$ G
0 A0 ^# x8 @: m& p
一、注释
- I4 V; V& A! M) t3 E1 r
3 u3 Q1 q: U5 M# L( k
1,采用中文;
3 b% _4 |* ]1 o" Q: i8 B: W
2,开始的注释:
* j$ n5 u9 V& }8 A
5 ?6 k0 C* U3 p% o' U* A1 J, e
文件(模块)注释内容:
' }+ J% {7 ~) L+ g% Z' p( _
公司名称、版权、作者名称、修改时间、模块功能、背景介绍等,复杂的算法需要加上流程说明;
/ f- x% z; a" U$ ~
# Q9 [+ e% T& v
比如:
7 `( }" O, C0 Y* m( w
/*********************************************************************/
* t! s( D$ a9 f) H1 S
/*公司名称: */
* C/ H7 `6 c# O
8 L1 Q" O% G; O9 |
/*模 块 名: LCD 模块 LCD 型号:HD44780 */
" X( s* T: V; {; n
! O: Q! y5 m6 A2 O
/*创 建 人:zhaojunjie 日期:2001-06-08 */
& C5 l. ]8 z a' S
/*修 改 人: 日期:2001-06-08 */
_, m" I* H {% X+ {9 O
/*功能描述: */
: H g6 w1 a3 {! F
/*其他说明: */
1 W8 C! {& l- [4 B% B
/*版 本:
8 @9 S0 t' A; M4 z
/**********************************************************************/
5 ] d) y4 m6 _
( e6 V6 V% b% m% D
函数开头的注释内容:
* c6 \9 e' D, K: W+ y9 B6 E
函数名称、功能、说明 输入、返回、函数描述、流程处理、全局变量、调用样例等,复杂的函数需要加上变量用途说明;
8 Z) M4 W2 Y+ a Z5 M
) |! `' L8 f5 @( r
/*********************************************************************
* O$ P3 Z% ^0 X( A C$ O
*
" i" e D, H. Z
* 函 数 名: v_LcdInit
6 Z N7 o( g) c2 }
* 功能描述: LCD初始化
( n8 ]) K+ h0 U2 b
* 函数说明: 初始化命令:0x3c, 0x08, 0x01, 0x06, 0x10, 0x0c
$ m( q& R$ m% Z' A( ~ o
* 调用函数: v_Delaymsec(),v_LcdCmd()
9 C& f6 y- d. q: O7 u
* 全局变量:
) B; w! Q8 m- s9 Y
* 输 入: 无
' V: T/ q# U3 D& l( w5 O. u
* 返 回: 无
, [& z7 N! V9 F4 q1 b7 G& I7 s3 Z
* 设 计 者:zhao 日期:2001-12-09
$ j+ X+ A8 l7 `) i
* 修 改 者:zhao 日期:2001-12-09
6 t3 o1 l% U% C- t, q3 L+ A
* 版 本:
# N+ F8 I2 S" s
***********************************************************************/
2 S! i4 W7 k% o# ^# C8 Y+ O
1 H6 {0 @- j, _( y* _/ k, P+ P
3、程序中的注释内容:
- e2 M5 m* _6 S! Y* ~- |" E6 \
( i. w0 h1 S K! N% d0 m' K" A
修改时间和作者、方便理解的注释等。注释内容应简炼、清楚、明了,一目了然的语句不加注释。
* P4 o) F. b# [
9 d3 x8 X, [' R6 A/ H3 v; @* B
二、命名:
7 P) m' C. \7 L' w9 y
. P6 j& ]% E" _# {6 A
命名必须具有一定的实际意义。
+ o0 }. D. ~4 R( w% k
6 C# Y/ u4 t1 ?* s, C
1、常量的命名:全部用大写。
- N- n2 i" T4 r [6 f
3 b \$ _8 R8 J6 V! C3 y; K+ Z! p
2、变量的命名:
+ V5 r. J) R+ ^, T
变量名加前缀,前缀反映变量的数据类型,用小写,反映变量意义的第一个字母大写,其他小写。
2 l6 C0 A* m5 L% \5 {: ^
其中变量数据类型:
9 D: T% f' _- j/ m3 |- @$ @
unsigned char 前缀 uc signed char 前缀 sc
7 L k' K: o% \3 q% W' d2 z2 U
unsigned int 前缀 ui signed int 前缀 si
/ r+ i( W. {6 S: [2 F
unsigned long 前缀 ul signed long 前缀 sl
$ e" i% g* |8 n/ r, P+ Y; z/ F
bit 前缀 b 指针 前缀 p
t3 t ~) Y4 s1 b4 H- a
$ g- \3 ?4 s2 e9 H0 H$ Q
例:ucReceivData 接收数据
6 `" n q6 _5 m
3、结构体命名:
5 k- a/ s9 ~6 y8 X' z' c
+ L$ X5 {0 i- d. [3 B6 T6 A
4、函数的命名:
5 l, I% i9 E E) k) T
函数名首字大写,若包含有两个单词的每个单词首字母大写。
7 e7 n q) O, E$ \2 _2 k
函数原型说明包括:引用外来函数及内部函数,外部引用必须在右侧注明函数来源: 模块名及文件名, 内部函数,只要注释其定义文件名;
6 T2 j0 f; W8 D% t- o6 x3 n; V# m6 t
- B2 h# v9 f- s H. H2 D
三、编辑风格
' E+ }9 N3 M% L# t# @$ G
3 A: {6 d& H: ?# ~8 ~7 L
1、缩进:缩进以 Tab 为单位,一个 Tab 为四个空格大小。预处理语句、全局数据、函数原型、标题、附加说明、函数说明、标号等均顶格书写。语句块的“{”“}”配对对齐,并与其前一行对齐;
7 y3 m" J+ n9 P& o6 h% O9 f- ?* _
6 L9 ~( W7 B( o/ p; J. `( |3 ^
2、空格:数据和函数在其类型,修饰名称之间适当空格并据情况对齐。关键字原则上空一格,如:
4 ^0 A/ {; b2 u5 p, M- J
if ( ... ) 等,运算符的空格规定如下:“->”、“[”、“]”、“++”、“--”、“~”、“!”、“+”、“-”(指正负号),“&”(取址或引用)、“*”(指使用指针时)等几个运算符两边不空格(其中单目运算符系指与操作数相连的一边),其它运算符(包括大多数二目运算符和三目运算符“?:”两边均空一格,“(”、“)”运算符在其内侧空一格,在作函数定义时还可据情况多空或不空格来对齐,但在函数实现时可以不用。“,”运算符只在其后空一格,需对齐时也可不空或多空格,对语句行后加的注释应用适当空格与语句隔开并尽可能对齐。
9 ?; @1 a u, I/ p; `1 N6 d3 z
1 W7 {( ~( f1 g! K+ k* P2 ?1 |
3、对齐:原则上关系密切的行应对齐,对齐包括类型、修饰、名称、参数等各部分对齐。另每一行的长度不应超过屏幕太多,必要时适当换行,换行时尽可能在“,”处或运算符处,换行后最好以运算符打头,并且以下各行均以该语句首行缩进,但该语句仍以首行的缩进为准,即如其下一行为“{”应与首行对齐。
" I, `: @" o* J, `- B* P) ]
( Y# U6 w) C5 s8 h
4、空行:程序文件结构各部分之间空两行,若不必要也可只空一行,各函数实现之间一般空两行
5 _$ M. U P: u4 H. _4 x
3 d. l9 n% V% L/ K9 x' F
5、修改:版本封存以后的修改一定要将老语句用/* */ 封闭,不能自行删除或修改,并要在文件及函数的修改记录中加以记录。
8 r3 M2 j& a' i% C2 Y: Q0 v
$ o3 p% p# D/ I2 B
6、形参:在定义函数时,在函数名后面括号中直接进行形式参数说明,不再另行说明。
作者:
cyxs
时间:
2016-8-9 16:38
楼主辛苦了!
. \3 V. S- ~7 i% E& j' K9 v
作者:
Gegu
时间:
2016-8-10 09:29
谢谢分享,必须赞一个~
- V3 |8 M/ L9 a8 r h8 A. c! c
欢迎光临 EDA365电子工程师网 (http://bbs.elecnest.cn/)
Powered by Discuz! X3.2