找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

巢课
电巢直播8月计划
查看: 30|回复: 2
打印 上一主题 下一主题

谈谈C51的编程规范

[复制链接]

159

主题

583

帖子

1229

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

积分
1229
跳转到指定楼层
1#
发表于 2016-8-9 15:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您!

您需要 登录 才可以下载或查看,没有帐号?注册

x
现在单片机的程序设计,C51已经得到广泛的推广和应用,算是单片机的主流设计程序,甚至可以说作为单片机开发人员必须要掌握的一门语言了。
! `: A& B! C" t9 `% _& y2 K" n: x) Y$ g, I
    作为一门工具,最终的目的就是实现功能。在满足这个前提条件下,我们希望我们的程序能很容易地被别人读懂,或者能够很容易地读懂别人的程序,在团体合作开发中就能起到事半功倍之效。在网上请求帮助时,如能以规范的写法贴出程序,网友会比较容易地明白你的问题,则会比较快的得到网友的帮助,否则让人看上半天也不明所以然,这样就达不到预期的效果了。因此,为了便于源程序的交流,减少合作开发中的障碍,希望大家能够探讨一下C51的编程规范。把各人认为好的建议提出来,然后做一个总结,作为一种大家一致认同的规范,我认为将会是一件很有意义的事。我先提出一些自已的想法,以此抛砖引玉。
7 B: h" I, j8 U0 ^& g" T: i: F9 i( K; O. I* K: E
一、注释# |/ P- N) R* l+ S* ?

( k/ u9 {& g  A) K; Q6 @6 c1,采用中文;
/ B8 v  d) C& \2,开始的注释:, L: f2 \3 X+ d$ ]

7 m+ f! F  l, L7 e- O文件(模块)注释内容:) C3 y, [9 i( S( A1 O' T* A; t% U
公司名称、版权、作者名称、修改时间、模块功能、背景介绍等,复杂的算法需要加上流程说明;3 \. J5 t: S; @- |% ^

. Z8 Y4 w. Z% e- v: s: Z! t; h# e比如:9 w7 V: x# |& k9 o" E  l! f/ a
/*********************************************************************/; ^' @  e4 F0 _; N
/*公司名称: */& @5 R+ I" V6 T, x, C: Q7 h$ V

& k' J5 w6 b9 g3 W/ i, S/*模 块 名: LCD 模块 LCD 型号:HD44780 */2 t  V! ^6 J# v5 D5 X. ~5 B  q# W

( k8 J9 [$ V( i4 n" _! n# c$ w. {/*创 建 人:zhaojunjie 日期:2001-06-08 */
0 Q3 ^) d& ?! r: h- a+ Q/*修 改 人: 日期:2001-06-08 */
$ ?+ V* J& m" \8 j/*功能描述: */
  ]+ g- [3 O" v9 ^' m/*其他说明: */9 a5 v; ^& |4 O3 i8 k  Q7 O
/*版 本:
, @% Z1 ~  ]+ }  G1 C6 Z3 w! J/**********************************************************************/6 l  i, x# l: `! J$ J

3 w0 g8 Y. X+ b. U- ~0 ?# }函数开头的注释内容:3 j9 X' U% G; @. f3 Q; f3 N
函数名称、功能、说明 输入、返回、函数描述、流程处理、全局变量、调用样例等,复杂的函数需要加上变量用途说明;
# e/ }4 H1 O4 y: L8 ]( d* Q1 U  t7 n5 U2 `, P( v; m$ w
/********************************************************************* % o8 w: L8 p, n  r5 k
*9 r! d7 C, r' {0 y* Q, X/ k
* 函 数 名: v_LcdInit
) r1 r+ T) k* t9 |* 功能描述: LCD初始化3 f6 s% I: [1 O' U
* 函数说明: 初始化命令:0x3c, 0x08, 0x01, 0x06, 0x10, 0x0c
9 t: \% i6 W' x$ y& M$ g$ C3 Q* 调用函数: v_Delaymsec(),v_LcdCmd()
# i* v; k1 t& N/ ?* 全局变量:
) }% |8 D4 y8 _1 t6 ^* 输 入: 无' m( Q9 q' g: G0 Z
* 返 回: 无* y; [5 `! Y9 e' @$ o7 i0 }( w
* 设 计 者:zhao 日期:2001-12-09" B) Y. g3 R  L
* 修 改 者:zhao 日期:2001-12-091 Q' O- g3 J7 y. O) |. M% j
* 版 本:4 Z  N+ L" O& L! m0 v7 R5 R; s
***********************************************************************/; z- V: X2 ^& y7 r: S' I
  o1 m0 K3 q$ l0 Y7 B( q% i; f; A
3、程序中的注释内容:$ F0 O8 m8 u8 p6 H5 F  j
( w9 E; O! ^' C. I
修改时间和作者、方便理解的注释等。注释内容应简炼、清楚、明了,一目了然的语句不加注释。( t# O' j/ o8 Q( O% }2 X

/ I+ F; ^0 ]4 }: k0 ^二、命名:
  x8 k8 t0 E- H  M. y- M
5 _& i6 |2 W& `, ?; }命名必须具有一定的实际意义。; ?% x; G0 Q) ^4 P7 k
! {7 h: v8 R5 o* T2 W5 o
1、常量的命名:全部用大写。3 ]  `2 T; x+ ]8 \8 R# p* [
  `+ _2 Q+ M: v' }! n" Q5 J
2、变量的命名:
* p. Y- _5 m6 W; D& E/ x变量名加前缀,前缀反映变量的数据类型,用小写,反映变量意义的第一个字母大写,其他小写。 1 l1 e1 [( |6 o; G  ^' V
其中变量数据类型:! v* d7 H0 ^' I* P4 s" \- P
unsigned char 前缀 uc signed char 前缀 sc
- \: R+ \9 i9 z* k; Q& v  Nunsigned int 前缀 ui signed int 前缀 si# K& C  {2 h1 v6 n0 w0 Q7 F) v
unsigned long 前缀 ul signed long 前缀 sl
1 s) X3 ]8 }: y2 [6 T+ T" _% N7 Ibit 前缀 b 指针 前缀 p
5 V$ Z6 J9 Q' S1 f0 T5 f
+ L0 d0 v1 v- n" z' X, u例:ucReceivData 接收数据4 ?  j5 ?9 y& {4 R5 a% P, R; P/ D
3、结构体命名:
7 C  z* y8 o9 D- I$ w0 L; N
. J  C* ]6 i3 i1 W; j$ J4、函数的命名:
4 q7 a& l  s( L9 Q  K函数名首字大写,若包含有两个单词的每个单词首字母大写。- _# [9 o( z1 f/ I- v
函数原型说明包括:引用外来函数及内部函数,外部引用必须在右侧注明函数来源: 模块名及文件名, 内部函数,只要注释其定义文件名;' w9 Z$ w! P0 P* k5 {0 [& O

+ E! M& _. G0 O0 C三、编辑风格' n$ M8 T# W! |' ^) P  |( z
- w% N1 c. H& G& x
1、缩进:缩进以 Tab 为单位,一个 Tab 为四个空格大小。预处理语句、全局数据、函数原型、标题、附加说明、函数说明、标号等均顶格书写。语句块的“{”“}”配对对齐,并与其前一行对齐;
9 J0 o$ C1 i6 d6 D& K% D% p/ b. O8 A' _
2、空格:数据和函数在其类型,修饰名称之间适当空格并据情况对齐。关键字原则上空一格,如:
* |( V8 H0 l2 C& b  X8 O! q/ h; c* J! Pif ( ... ) 等,运算符的空格规定如下:“->”、“[”、“]”、“++”、“--”、“~”、“!”、“+”、“-”(指正负号),“&”(取址或引用)、“*”(指使用指针时)等几个运算符两边不空格(其中单目运算符系指与操作数相连的一边),其它运算符(包括大多数二目运算符和三目运算符“?:”两边均空一格,“(”、“)”运算符在其内侧空一格,在作函数定义时还可据情况多空或不空格来对齐,但在函数实现时可以不用。“,”运算符只在其后空一格,需对齐时也可不空或多空格,对语句行后加的注释应用适当空格与语句隔开并尽可能对齐。
/ x7 @% T0 H) _% F: t
( f- D( P* V: j2 ^7 x+ k; n3、对齐:原则上关系密切的行应对齐,对齐包括类型、修饰、名称、参数等各部分对齐。另每一行的长度不应超过屏幕太多,必要时适当换行,换行时尽可能在“,”处或运算符处,换行后最好以运算符打头,并且以下各行均以该语句首行缩进,但该语句仍以首行的缩进为准,即如其下一行为“{”应与首行对齐。4 l8 g9 P) ]2 u  E+ e$ l* d

* r2 e# K5 Y0 G4、空行:程序文件结构各部分之间空两行,若不必要也可只空一行,各函数实现之间一般空两行
; I, _. e% S2 c3 P* [0 d" |. T: C9 x: z3 @; B4 Y  g
5、修改:版本封存以后的修改一定要将老语句用/* */ 封闭,不能自行删除或修改,并要在文件及函数的修改记录中加以记录。
- Z9 j5 \$ h! z. M3 R* `* T* n1 S6 |3 Z2 X. K! x+ y
6、形参:在定义函数时,在函数名后面括号中直接进行形式参数说明,不再另行说明。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 支持!支持! 反对!反对!

159

主题

527

帖子

1197

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

积分
1197
2#
发表于 2016-8-9 16:38 | 只看该作者
楼主辛苦了!
4 G1 B8 g# o0 J' ?4 X1 Q/ M) [3 M

211

主题

652

帖子

1507

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

积分
1507
3#
发表于 2016-8-10 09:29 | 只看该作者
谢谢分享,必须赞一个~
7 z* k. ?6 n9 G+ k7 O0 V# @% O. v
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

巢课

技术风云榜

关于我们|手机版|EDA365 ( 粤ICP备18020198号 )

GMT+8, 2024-11-15 10:04 , Processed in 0.063366 second(s), 31 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表