找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

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

谈谈C51的编程规范

[复制链接]

159

主题

583

帖子

1229

积分

四级会员(40)

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

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

EDA365欢迎您!

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

x
现在单片机的程序设计,C51已经得到广泛的推广和应用,算是单片机的主流设计程序,甚至可以说作为单片机开发人员必须要掌握的一门语言了。
$ k6 f" P+ j, m8 W- M. i' V9 _" E# V' J; E  a: L( n. A- L2 ^
    作为一门工具,最终的目的就是实现功能。在满足这个前提条件下,我们希望我们的程序能很容易地被别人读懂,或者能够很容易地读懂别人的程序,在团体合作开发中就能起到事半功倍之效。在网上请求帮助时,如能以规范的写法贴出程序,网友会比较容易地明白你的问题,则会比较快的得到网友的帮助,否则让人看上半天也不明所以然,这样就达不到预期的效果了。因此,为了便于源程序的交流,减少合作开发中的障碍,希望大家能够探讨一下C51的编程规范。把各人认为好的建议提出来,然后做一个总结,作为一种大家一致认同的规范,我认为将会是一件很有意义的事。我先提出一些自已的想法,以此抛砖引玉。
3 B' `- [  k; o3 n  O
: ?! {5 x0 l1 w* d' `一、注释
( l. S4 O% o. E" r9 x4 i" B& G
2 t2 S+ R* s$ M# U- J9 A8 p* c1,采用中文;0 g& L) u8 k  D# d' N( c. X
2,开始的注释:
, q: O  E: n" _! I* _
, |4 G5 a" ~+ Y文件(模块)注释内容:4 z( h( m  o* n0 i$ H
公司名称、版权、作者名称、修改时间、模块功能、背景介绍等,复杂的算法需要加上流程说明;6 a- ~6 ?! ?1 p! F) ]8 R7 l0 [

6 ]6 o8 B% }8 [" _3 d' z比如:* R8 l' `$ }& p9 k' h6 v
/*********************************************************************/
# r5 B( T* U3 ^5 H; l$ k! g/*公司名称: */
- R+ m$ w2 ^8 B! N% W# u( o3 M2 z2 @4 X
/*模 块 名: LCD 模块 LCD 型号:HD44780 */: A  D2 R  ^% R. l" P; O$ _$ ~

! P$ P) [4 Z6 q& ?& [, x/*创 建 人:zhaojunjie 日期:2001-06-08 */
( d. y/ `  W3 q) ^" P( I0 K/*修 改 人: 日期:2001-06-08 */ : H/ J2 {& c" x0 m& O: v5 Z, P
/*功能描述: */( H/ M% y( H; c/ j
/*其他说明: *// _/ x8 i6 l: R: a( C/ q
/*版 本:
' t7 O0 n# U- N% P. B; w/**********************************************************************/9 U9 e/ o) y3 E+ M3 W

2 M. ^* O% E. j$ A( U函数开头的注释内容:
; z8 h* z$ R1 H' }8 V- h' {函数名称、功能、说明 输入、返回、函数描述、流程处理、全局变量、调用样例等,复杂的函数需要加上变量用途说明;* N5 Y; m+ A+ M7 a7 {5 h1 ?
6 v; i6 ]2 K; e' |
/********************************************************************* ' q6 _* J* r6 g. X3 {; ^
*
9 d4 S4 c+ a" l: V6 k* 函 数 名: v_LcdInit
' `9 q( L- m& J3 F$ `* 功能描述: LCD初始化% u8 W  v- C. y" @' v" p+ p( n8 b
* 函数说明: 初始化命令:0x3c, 0x08, 0x01, 0x06, 0x10, 0x0c  o* U7 k4 W: ^" J  \' p
* 调用函数: v_Delaymsec(),v_LcdCmd()
, I' `0 a; m6 Q* 全局变量:
( |! v3 s9 x/ B* 输 入: 无
8 Z8 l# ^: h0 x7 i: T- w* 返 回: 无
6 b* l7 i' ^/ h: x. Z* X4 L: _* 设 计 者:zhao 日期:2001-12-099 R$ K8 z# H- g( G6 W  D5 z7 X
* 修 改 者:zhao 日期:2001-12-09
; o- h  [, G) C' z- `# ^3 r* 版 本:, W, j) B5 L6 d9 |- e: I& `' E$ u- ]% K
***********************************************************************/( j6 D- w0 l, D7 y" j

0 m. A. J+ C8 b3、程序中的注释内容:! X; c% C  d5 T
3 ^- D8 Q$ E4 }1 q% Y' }2 M
修改时间和作者、方便理解的注释等。注释内容应简炼、清楚、明了,一目了然的语句不加注释。( u5 Z0 \% @2 J( F/ r7 J
  v+ a# ], w: L/ y( g6 \; @3 O
二、命名:
  @+ C; ^5 E; U2 L9 x% W: D! _
命名必须具有一定的实际意义。% M2 U- H2 j+ i# ^

3 e: [0 O7 U. p6 [% b1、常量的命名:全部用大写。
- z' @$ r' O" X) U" _
* U$ J9 I5 E4 R* Z, {* y0 x+ Z4 \2、变量的命名:9 V  K5 z, e' u' M8 q
变量名加前缀,前缀反映变量的数据类型,用小写,反映变量意义的第一个字母大写,其他小写。
# Z# D3 x. d- ?4 b. p& }+ T其中变量数据类型:& H5 h7 k/ ?4 J4 `3 i1 ^+ N
unsigned char 前缀 uc signed char 前缀 sc + j7 \% v" M) l, G, Z
unsigned int 前缀 ui signed int 前缀 si0 b, n- c9 g% c
unsigned long 前缀 ul signed long 前缀 sl% G2 f$ G8 M; z# s
bit 前缀 b 指针 前缀 p
2 `8 u# M; E9 _9 `+ P1 U
* v% u5 S7 I$ s+ v3 _例:ucReceivData 接收数据
/ [9 w% k( N2 h4 d3、结构体命名:
- O8 A" u1 ~' L- [% o9 I
" ~  H$ O( {" Y4 D4、函数的命名:2 y0 q% w4 w; H3 l8 C2 d  }& g/ x1 C" s" b
函数名首字大写,若包含有两个单词的每个单词首字母大写。* T# e" i5 [- n
函数原型说明包括:引用外来函数及内部函数,外部引用必须在右侧注明函数来源: 模块名及文件名, 内部函数,只要注释其定义文件名;. I  ^8 H0 U7 Z

4 N% \; m1 Y& {' O9 K三、编辑风格
, z. u2 _6 G% V: e8 n0 C# g( g, B6 @6 ]( Y9 O. x
1、缩进:缩进以 Tab 为单位,一个 Tab 为四个空格大小。预处理语句、全局数据、函数原型、标题、附加说明、函数说明、标号等均顶格书写。语句块的“{”“}”配对对齐,并与其前一行对齐;4 W* ^/ v/ _2 r, P( Z
; j. R1 Y/ o. K
2、空格:数据和函数在其类型,修饰名称之间适当空格并据情况对齐。关键字原则上空一格,如:
/ b" G6 n3 Z  m: }& Y4 Zif ( ... ) 等,运算符的空格规定如下:“->”、“[”、“]”、“++”、“--”、“~”、“!”、“+”、“-”(指正负号),“&”(取址或引用)、“*”(指使用指针时)等几个运算符两边不空格(其中单目运算符系指与操作数相连的一边),其它运算符(包括大多数二目运算符和三目运算符“?:”两边均空一格,“(”、“)”运算符在其内侧空一格,在作函数定义时还可据情况多空或不空格来对齐,但在函数实现时可以不用。“,”运算符只在其后空一格,需对齐时也可不空或多空格,对语句行后加的注释应用适当空格与语句隔开并尽可能对齐。) G5 R+ r, S' V$ z: Z8 T; {: @

- P: `& K7 S4 G3、对齐:原则上关系密切的行应对齐,对齐包括类型、修饰、名称、参数等各部分对齐。另每一行的长度不应超过屏幕太多,必要时适当换行,换行时尽可能在“,”处或运算符处,换行后最好以运算符打头,并且以下各行均以该语句首行缩进,但该语句仍以首行的缩进为准,即如其下一行为“{”应与首行对齐。5 p: {7 {$ ]* z* ?) j
( Z, J( b# g2 X8 a: p7 g
4、空行:程序文件结构各部分之间空两行,若不必要也可只空一行,各函数实现之间一般空两行+ ?/ P! A) g* _9 M
' ~5 ]+ N7 f2 z) K5 I0 M) m$ k" i" O2 k
5、修改:版本封存以后的修改一定要将老语句用/* */ 封闭,不能自行删除或修改,并要在文件及函数的修改记录中加以记录。) U) T  V& V! K- w0 T

, \* x! U2 e  b) K9 e& E5 D6、形参:在定义函数时,在函数名后面括号中直接进行形式参数说明,不再另行说明。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 支持!支持! 反对!反对!

159

主题

527

帖子

1197

积分

四级会员(40)

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

积分
1197
2#
发表于 2016-8-9 16:38 | 只看该作者
楼主辛苦了!
- S* J" M+ W! |1 f) h: ?

211

主题

652

帖子

1507

积分

四级会员(40)

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

积分
1507
3#
发表于 2016-8-10 09:29 | 只看该作者
谢谢分享,必须赞一个~
. i) C& G- b3 J$ Q" h
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

巢课

技术风云榜

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

GMT+8, 2024-11-15 12:12 , Processed in 0.067628 second(s), 32 queries , Gzip On.

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

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

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