找回密码
 注册
关于网站域名变更的通知
查看: 387|回复: 3
打印 上一主题 下一主题

谈谈C51的编程规范

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
现在单片机的程序设计,C51已经得到广泛的推广和应用,算是单片机的主流设计程序,甚至可以说作为单片机开发人员必须要掌握的一门语言了。
6 c( p; P0 U" `* X- Q( v
' K6 G/ v! y4 O( l9 l' D    作为一门工具,最终的目的就是实现功能。在满足这个前提条件下,我们希望我们的程序能很容易地被别人读懂,或者能够很容易地读懂别人的程序,在团体合作开发中就能起到事半功倍之效。在网上请求帮助时,如能以规范的写法贴出程序,网友会比较容易地明白你的问题,则会比较快的得到网友的帮助,否则让人看上半天也不明所以然,这样就达不到预期的效果了。因此,为了便于源程序的交流,减少合作开发中的障碍,希望大家能够探讨一下C51的编程规范。把各人认为好的建议提出来,然后做一个总结,作为一种大家一致认同的规范,我认为将会是一件很有意义的事。我先提出一些自已的想法,以此抛砖引玉。" p5 e; w9 J$ U* K0 f

1 `0 N1 \6 D; G5 |一、注释
: X' y+ R+ p9 Y. a3 E
& h( s: q9 L" z6 |$ @1,采用中文;
5 ^3 U. X- W$ f5 H! \2,开始的注释:
: @0 g; E: _; r$ W7 X
8 b1 K# g' c0 T. Y: h. \, s文件(模块)注释内容:* s& v0 \4 j# \1 [, X; ~$ @
公司名称、版权、作者名称、修改时间、模块功能、背景介绍等,复杂的算法需要加上流程说明;% y7 {" R  j. F. Z. e2 [) d
7 u4 n0 X/ u% J; G
比如:
, q# G7 f9 t4 g$ J3 B/*********************************************************************/
. _- d4 l# W' ?4 K/*公司名称: */
& V3 N, x* Y: q  {4 [0 K3 k
1 K- H1 G, {0 |8 d/*模 块 名: LCD 模块 LCD 型号:HD44780 */3 g) D# X6 W4 y4 K) z
# E* t* P5 Z3 y0 x* b4 S' ~8 V7 Z
/*创 建 人:zhaojunjie 日期:2001-06-08 */1 A* @# O* ?) s& ~: Z. v( |( S
/*修 改 人: 日期:2001-06-08 */
4 m% `, B# b. _  p0 Y/*功能描述: */
% l5 T6 \$ z5 {; v9 y6 w/*其他说明: */
) h8 @( [$ u% i) ?/*版 本:- |0 U" T) k* _7 L' h# U
/**********************************************************************// Y4 F; ^: J* T0 D" I" @
* u- G6 p& D1 I) t" I$ `
函数开头的注释内容:9 [+ y# F6 [, v* O2 A$ G% P# V7 w
函数名称、功能、说明 输入、返回、函数描述、流程处理、全局变量、调用样例等,复杂的函数需要加上变量用途说明;
' q. {7 O2 Y  ?) W3 y: P& U, T' Y2 {+ E* j7 m) W
/*********************************************************************
" l! p$ r9 o, D: P4 S*
+ ^. V2 \% W+ n5 s$ m3 y3 c0 n* 函 数 名: v_LcdInit
# `0 j; v: e* L* 功能描述: LCD初始化
# Z( d9 }& Q; B) z  ^2 E* 函数说明: 初始化命令:0x3c, 0x08, 0x01, 0x06, 0x10, 0x0c5 y$ r) l9 i9 R0 d- G& ~
* 调用函数: v_Delaymsec(),v_LcdCmd()9 Q$ u" k% y3 L5 i" m1 {+ j
* 全局变量:
6 y2 R2 P' e. t% Y# q- m* 输 入: 无( r6 j, Y3 ]& N( @- L) _
* 返 回: 无
, \' m+ H5 w0 I8 |* 设 计 者:zhao 日期:2001-12-09
; n. }' ]5 M/ q& d  H* 修 改 者:zhao 日期:2001-12-097 f' b2 V* [' ^, `3 x$ O
* 版 本:
$ x& Y9 L9 h8 {  B" T/ O***********************************************************************/
8 M. `& N. {, v& `! E& ]: P6 }3 I8 m
3、程序中的注释内容:, f5 W. y1 G% F' j4 n* S! h. o: A

# ^$ X" P/ p0 D( }修改时间和作者、方便理解的注释等。注释内容应简炼、清楚、明了,一目了然的语句不加注释。
( A3 M  s& Q2 b& x$ G6 y9 U0 W" [" i3 d
二、命名:
5 u" {, d& ]3 V" s+ `  U: X" }9 r8 Y& v4 X
命名必须具有一定的实际意义。
( q3 e: j- b) I. v& n! `7 H# u! v& R1 G
1、常量的命名:全部用大写。% B% p' R. q  q# g* M. ~, X& a

, z, p( |! P3 \2 q2、变量的命名:7 b- x" j1 Q' i( T
变量名加前缀,前缀反映变量的数据类型,用小写,反映变量意义的第一个字母大写,其他小写。 , ^7 Q7 O$ B2 C( e( X2 I
其中变量数据类型:- J! Q. T$ Z/ ]7 n, L! Q  }7 N# E
unsigned char 前缀 uc signed char 前缀 sc + U9 [- C( D! W1 Y0 e
unsigned int 前缀 ui signed int 前缀 si
; \5 {; [+ X3 w+ Wunsigned long 前缀 ul signed long 前缀 sl
( w6 S( P* ~3 R- m# ?bit 前缀 b 指针 前缀 p* N5 u7 O# d% r2 P

2 }3 b9 e* B; v3 i例:ucReceivData 接收数据
: k  T1 h! L8 {7 A4 _3、结构体命名:- b1 _$ W$ X  m$ |
8 f  j' C% x* O8 h$ j# G
4、函数的命名:) M1 s- l& \* y$ J# ~
函数名首字大写,若包含有两个单词的每个单词首字母大写。
0 Y+ m& q. [+ K函数原型说明包括:引用外来函数及内部函数,外部引用必须在右侧注明函数来源: 模块名及文件名, 内部函数,只要注释其定义文件名;
( ~' r) V' e' i2 t- ]
; d5 M2 ~8 _2 ]( y7 [" j三、编辑风格& N: `  v1 d% V2 ]2 n- G
$ T. v% t" k0 {1 }
1、缩进:缩进以 Tab 为单位,一个 Tab 为四个空格大小。预处理语句、全局数据、函数原型、标题、附加说明、函数说明、标号等均顶格书写。语句块的“{”“}”配对对齐,并与其前一行对齐;
% w5 g" Q4 Z1 ]: u1 i3 K6 k- R6 V" l& z
2、空格:数据和函数在其类型,修饰名称之间适当空格并据情况对齐。关键字原则上空一格,如:
4 B; Y8 d8 s8 P8 F7 A5 |$ mif ( ... ) 等,运算符的空格规定如下:“->”、“[”、“]”、“++”、“--”、“~”、“!”、“+”、“-”(指正负号),“&”(取址或引用)、“*”(指使用指针时)等几个运算符两边不空格(其中单目运算符系指与操作数相连的一边),其它运算符(包括大多数二目运算符和三目运算符“?:”两边均空一格,“(”、“)”运算符在其内侧空一格,在作函数定义时还可据情况多空或不空格来对齐,但在函数实现时可以不用。“,”运算符只在其后空一格,需对齐时也可不空或多空格,对语句行后加的注释应用适当空格与语句隔开并尽可能对齐。: Q. w" `8 x  Y  a
5 l- i2 X+ z' H6 _  f
3、对齐:原则上关系密切的行应对齐,对齐包括类型、修饰、名称、参数等各部分对齐。另每一行的长度不应超过屏幕太多,必要时适当换行,换行时尽可能在“,”处或运算符处,换行后最好以运算符打头,并且以下各行均以该语句首行缩进,但该语句仍以首行的缩进为准,即如其下一行为“{”应与首行对齐。
' ~! G3 K8 Y/ g% |$ B' V
% c5 i( w4 a! G9 @! G& }$ {4、空行:程序文件结构各部分之间空两行,若不必要也可只空一行,各函数实现之间一般空两行
; s) U. G& o% C: B3 [; J# T! }1 G; m, ^% I4 [9 b. j- M
5、修改:版本封存以后的修改一定要将老语句用/* */ 封闭,不能自行删除或修改,并要在文件及函数的修改记录中加以记录。
* B; k5 C- b0 ?$ }/ v
( P# K' F. X0 ]; n$ ~9 P: J6、形参:在定义函数时,在函数名后面括号中直接进行形式参数说明,不再另行说明。

该用户从未签到

2#
发表于 2016-8-9 16:38 | 只看该作者
楼主辛苦了!/ k. ^0 R' q6 g2 N6 ?( r7 w9 J

该用户从未签到

3#
发表于 2016-8-10 09:29 | 只看该作者
谢谢分享,必须赞一个~
( c# o  t4 W( z) w  M8 g/ b

该用户从未签到

4#
发表于 2019-1-14 15:44 | 只看该作者
不错,谢谢分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-7-17 07:59 , Processed in 0.125000 second(s), 23 queries , Gzip On.

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

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

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