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

谈谈C51的编程规范

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
现在单片机的程序设计,C51已经得到广泛的推广和应用,算是单片机的主流设计程序,甚至可以说作为单片机开发人员必须要掌握的一门语言了。
3 R0 n5 i3 T5 X  E! }: u3 A9 R# B+ C/ D* \6 s  E6 ^: G! w( e+ g
    作为一门工具,最终的目的就是实现功能。在满足这个前提条件下,我们希望我们的程序能很容易地被别人读懂,或者能够很容易地读懂别人的程序,在团体合作开发中就能起到事半功倍之效。在网上请求帮助时,如能以规范的写法贴出程序,网友会比较容易地明白你的问题,则会比较快的得到网友的帮助,否则让人看上半天也不明所以然,这样就达不到预期的效果了。因此,为了便于源程序的交流,减少合作开发中的障碍,希望大家能够探讨一下C51的编程规范。把各人认为好的建议提出来,然后做一个总结,作为一种大家一致认同的规范,我认为将会是一件很有意义的事。我先提出一些自已的想法,以此抛砖引玉。
4 |5 J2 z8 V1 P+ O7 w& B1 O3 F( l" T3 d, R  Q5 k: r0 v! s. Z
一、注释5 x6 o  f9 o( |1 O7 R/ `; J: i$ \5 u
0 k  i! V5 {2 ^0 p2 {  V# t4 n, T/ U
1,采用中文;
. y7 g( s: r% @) L! W/ ^2,开始的注释:/ x9 Q# ~2 U7 [! Y+ k

$ o6 n! N5 z( h* m" s* D0 z文件(模块)注释内容:
1 e: J% p4 |9 u. `4 r) Q公司名称、版权、作者名称、修改时间、模块功能、背景介绍等,复杂的算法需要加上流程说明;/ L6 C, m9 W, A& l! @# u4 i" i

$ y$ C. `! k( X比如:
1 u9 o  ^% G# z6 y5 E/*********************************************************************/
: V7 _8 K4 P5 R9 H5 L/*公司名称: */
# y+ |/ s" E% O! D" L) u$ t
+ w" `# j, \8 v2 A( D4 u- X/*模 块 名: LCD 模块 LCD 型号:HD44780 */
9 {9 ?  K; Q) s9 }: t0 K8 u$ K+ f' F1 s% d+ F3 K1 `
/*创 建 人:zhaojunjie 日期:2001-06-08 */3 d7 A+ I: r1 J' Q) c
/*修 改 人: 日期:2001-06-08 */
/ c, R0 V! v' D7 i8 ^( a- }/*功能描述: */
# `5 B% N* @, `% [/*其他说明: */+ M; ^, `/ ?0 o9 b$ d/ ~
/*版 本:- j' n3 D% v8 Y% ?: }& x
/**********************************************************************/) K: ^( r2 ?2 ?% V! J

% x$ c* E7 T0 h3 m) \. u函数开头的注释内容:3 N- a+ ?3 `. M, c  O( J: w& ]
函数名称、功能、说明 输入、返回、函数描述、流程处理、全局变量、调用样例等,复杂的函数需要加上变量用途说明;
8 t0 ?$ L- \* {1 U" |  a0 j4 L' F7 u; h
/*********************************************************************
- v( i8 ~. ]) }1 F* S*5 A1 S& `& C) D# p/ B3 Y
* 函 数 名: v_LcdInit
2 E( r& u  d9 t* 功能描述: LCD初始化  K) j, D1 G+ V5 S" J. s$ r- |
* 函数说明: 初始化命令:0x3c, 0x08, 0x01, 0x06, 0x10, 0x0c: M# M' H( Q: |  q- i) d
* 调用函数: v_Delaymsec(),v_LcdCmd()
) C: n- O/ y0 r" L9 D* 全局变量:
8 ~$ G5 v7 M* j- Z9 p* 输 入: 无
+ f6 Q0 G' L/ e; j% b3 \* 返 回: 无2 r3 x* W6 O9 [
* 设 计 者:zhao 日期:2001-12-09" S( D* s9 c1 }& W
* 修 改 者:zhao 日期:2001-12-09( O$ h* V0 A& J* t9 S
* 版 本:5 W$ u5 `3 O4 ^9 n
***********************************************************************/; ]$ y$ n8 h1 |6 Z' x& ?- I8 M
1 _. E+ z- S- v" T! ~
3、程序中的注释内容:; G3 i0 C' K' s0 A$ \
, Q5 `3 k( L) Y1 l+ Z
修改时间和作者、方便理解的注释等。注释内容应简炼、清楚、明了,一目了然的语句不加注释。: [9 j3 S9 c" @+ {7 D% B

7 |+ s+ g* P1 V$ p3 y) F1 {二、命名:
/ R7 O1 C8 a- b% y& P  C- |" N# {4 ]/ y) y
命名必须具有一定的实际意义。
" u$ O5 x  x6 o6 G# B/ H8 \2 O  N; m* K0 |! C3 f# S
1、常量的命名:全部用大写。
  M3 d, k7 c5 f! t+ m0 m6 p7 O- y( B/ c
2、变量的命名:$ }# r! g$ v3 P7 N: E
变量名加前缀,前缀反映变量的数据类型,用小写,反映变量意义的第一个字母大写,其他小写。 $ ^; X% t' J, ]; O
其中变量数据类型:
* Y1 h) }9 @* ^4 Y/ punsigned char 前缀 uc signed char 前缀 sc
7 [" _- m7 e( J5 Munsigned int 前缀 ui signed int 前缀 si
/ M4 x  q+ \+ H6 Y: C3 Munsigned long 前缀 ul signed long 前缀 sl
' k2 R/ i; t  _( obit 前缀 b 指针 前缀 p) w9 ~0 f3 B+ g& G. H
/ ~% j- f: q5 ^- i, \. z! ]8 @
例:ucReceivData 接收数据
' b2 R# H* d# g: {7 U  {/ o3、结构体命名:
. \# a7 q: U5 I5 A6 [$ v) d0 ~# V- Q8 \8 L& v1 P" k
4、函数的命名:
, W" N' D& _* S  E4 o; q! \; {. E函数名首字大写,若包含有两个单词的每个单词首字母大写。
9 P8 k  s  E# i6 N) o: X函数原型说明包括:引用外来函数及内部函数,外部引用必须在右侧注明函数来源: 模块名及文件名, 内部函数,只要注释其定义文件名;4 |$ r9 o7 o7 V* R; F& x1 |9 r$ h
7 ]5 I. J8 c* v' e' Z, w# q9 S4 C
三、编辑风格
) D8 `/ z3 C' m
) y* B" ^# n2 d2 f- G" O) ^1 a1、缩进:缩进以 Tab 为单位,一个 Tab 为四个空格大小。预处理语句、全局数据、函数原型、标题、附加说明、函数说明、标号等均顶格书写。语句块的“{”“}”配对对齐,并与其前一行对齐;
7 u* ], W4 x, x' x6 b
2 M: J, ?  B; h* c" M$ `2、空格:数据和函数在其类型,修饰名称之间适当空格并据情况对齐。关键字原则上空一格,如: ' \- m6 {- {5 N' P/ f* E. a( N
if ( ... ) 等,运算符的空格规定如下:“->”、“[”、“]”、“++”、“--”、“~”、“!”、“+”、“-”(指正负号),“&”(取址或引用)、“*”(指使用指针时)等几个运算符两边不空格(其中单目运算符系指与操作数相连的一边),其它运算符(包括大多数二目运算符和三目运算符“?:”两边均空一格,“(”、“)”运算符在其内侧空一格,在作函数定义时还可据情况多空或不空格来对齐,但在函数实现时可以不用。“,”运算符只在其后空一格,需对齐时也可不空或多空格,对语句行后加的注释应用适当空格与语句隔开并尽可能对齐。/ [3 C! x, l1 r6 z& q  [' j

; n7 H+ Q6 I' [2 l9 m3、对齐:原则上关系密切的行应对齐,对齐包括类型、修饰、名称、参数等各部分对齐。另每一行的长度不应超过屏幕太多,必要时适当换行,换行时尽可能在“,”处或运算符处,换行后最好以运算符打头,并且以下各行均以该语句首行缩进,但该语句仍以首行的缩进为准,即如其下一行为“{”应与首行对齐。* Q0 v% v$ d8 G9 i( P5 `
* ?. R- ^5 `" O- m% s; p
4、空行:程序文件结构各部分之间空两行,若不必要也可只空一行,各函数实现之间一般空两行
3 j  m2 o7 n4 x; G6 S! I3 c: B: {- x+ p9 u2 y" G0 }0 i! b
5、修改:版本封存以后的修改一定要将老语句用/* */ 封闭,不能自行删除或修改,并要在文件及函数的修改记录中加以记录。
7 ^% t9 p: C# q. j( m3 t$ R* P, E# {/ ~8 }) Q
6、形参:在定义函数时,在函数名后面括号中直接进行形式参数说明,不再另行说明。

该用户从未签到

2#
发表于 2016-8-9 16:38 | 只看该作者
楼主辛苦了!
0 k# H: @% ~* `# ~

该用户从未签到

3#
发表于 2016-8-10 09:29 | 只看该作者
谢谢分享,必须赞一个~
* `. Z( f$ S  x( D7 n  x+ v0 e

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-9-12 08:07 , Processed in 0.109375 second(s), 23 queries , Gzip On.

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

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

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