找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

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

谈谈C51的编程规范

[复制链接]

159

主题

583

帖子

1229

积分

四级会员(40)

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

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

EDA365欢迎您!

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

x
现在单片机的程序设计,C51已经得到广泛的推广和应用,算是单片机的主流设计程序,甚至可以说作为单片机开发人员必须要掌握的一门语言了。& N$ e$ P) P2 M2 h; x7 F

) f7 B+ _1 R. m/ k7 w+ Z    作为一门工具,最终的目的就是实现功能。在满足这个前提条件下,我们希望我们的程序能很容易地被别人读懂,或者能够很容易地读懂别人的程序,在团体合作开发中就能起到事半功倍之效。在网上请求帮助时,如能以规范的写法贴出程序,网友会比较容易地明白你的问题,则会比较快的得到网友的帮助,否则让人看上半天也不明所以然,这样就达不到预期的效果了。因此,为了便于源程序的交流,减少合作开发中的障碍,希望大家能够探讨一下C51的编程规范。把各人认为好的建议提出来,然后做一个总结,作为一种大家一致认同的规范,我认为将会是一件很有意义的事。我先提出一些自已的想法,以此抛砖引玉。8 S& ]* r& c; m

' N' U+ R( @1 U3 [( O一、注释
% f0 F" ^; d# o  a
$ B: @: T) _3 E! T( \% k1,采用中文;
* x& \$ M3 @4 b4 L2 J* u" |& c2,开始的注释:+ @# S2 a+ A% E$ u( L

. R& g: x' R+ I/ L/ m! U0 Z  H文件(模块)注释内容:0 j+ ^  ~4 H+ h" `! ]9 n. F4 B
公司名称、版权、作者名称、修改时间、模块功能、背景介绍等,复杂的算法需要加上流程说明;0 H  K  m; S1 T+ r' f; `3 p2 ?6 U% I
9 a  |7 Z5 P+ w! J
比如:
" g9 K& L: s# ~) ^/*********************************************************************/
* `* p: _; w" v7 A9 e/*公司名称: */$ y) n! n. M' `$ l' R' U; {
1 u  X: ^3 T9 e! }5 K/ B7 d! I9 ^4 I
/*模 块 名: LCD 模块 LCD 型号:HD44780 */
0 J+ a4 {  k) o- ~) o7 Y/ @8 p7 D, k$ c2 j
/*创 建 人:zhaojunjie 日期:2001-06-08 */0 e% R0 x! r$ \: ?$ n# e7 [9 k
/*修 改 人: 日期:2001-06-08 */ , @/ o, N  O6 Q" W$ c
/*功能描述: */
6 t5 x" M# Z! _( a9 B9 z/*其他说明: */" j) }1 M9 t  @& [/ |8 J
/*版 本:
* D4 ~* N4 z9 Q7 s8 F9 C% M. f) F/**********************************************************************/
1 _  m0 M, n& g# x7 q3 u8 C' i9 x) j4 `' Y" K
函数开头的注释内容:- H. c6 M! s" J* R' n# g! l
函数名称、功能、说明 输入、返回、函数描述、流程处理、全局变量、调用样例等,复杂的函数需要加上变量用途说明;4 V  f! d4 Q% [/ g: b0 y! `2 J
; l; W3 i$ v" f) f4 V2 I6 t
/*********************************************************************
3 [) `: F7 [- [- a*+ D" e5 Z* U7 V, y2 k
* 函 数 名: v_LcdInit
9 T( H/ w" v* E/ J0 s8 u$ o) U% k' C* 功能描述: LCD初始化" R7 r2 w6 w/ s- h
* 函数说明: 初始化命令:0x3c, 0x08, 0x01, 0x06, 0x10, 0x0c% h7 O+ n$ g7 R( K+ G4 x6 `
* 调用函数: v_Delaymsec(),v_LcdCmd()
" e4 L  Z) e% k: N* 全局变量:+ A9 E; V0 e  a; e  {0 x
* 输 入: 无
3 l: m; g7 M' J$ D2 x* 返 回: 无: ^; }) j' `; x9 U- K! s, A
* 设 计 者:zhao 日期:2001-12-099 s, o5 ^, E. Y& _. f9 [& a
* 修 改 者:zhao 日期:2001-12-09
; J8 Y( P. e5 u( K; [2 n8 m* 版 本:# U0 g3 g% J3 e5 e5 E5 R, O
***********************************************************************/  ~8 H5 J4 M9 O$ T3 a% _- x
* q7 f' n/ Q6 i5 S; k
3、程序中的注释内容:
: P9 P1 z. D6 {1 l3 g$ U! |& D8 l+ L2 ]# K
修改时间和作者、方便理解的注释等。注释内容应简炼、清楚、明了,一目了然的语句不加注释。! F' k- X# a1 W

1 f' w# S4 v& z8 [8 x! d5 M  W二、命名:
& n. _! w( \3 W( m: t$ k  v6 R
7 V3 z: A7 C% u. {, U% Q3 X命名必须具有一定的实际意义。
" M- v, b$ Q6 `& ?: U2 I7 s1 ~$ T5 ^0 Z# p) h
1、常量的命名:全部用大写。0 I& N+ ]: H  ^. @$ C6 }4 I

, E9 X" F' D4 f4 T% W; A7 }) V2、变量的命名:
5 w* @0 }- U( {: G3 k7 X变量名加前缀,前缀反映变量的数据类型,用小写,反映变量意义的第一个字母大写,其他小写。
! F, R1 P+ E& q! L; ^% [其中变量数据类型:
" |  P- H- m) W0 H# funsigned char 前缀 uc signed char 前缀 sc . i: Q& _1 B( k1 [
unsigned int 前缀 ui signed int 前缀 si
* A$ a. s8 x$ Q$ ^5 e. K6 U8 G4 Nunsigned long 前缀 ul signed long 前缀 sl
! G$ r5 }1 S0 z+ X; Wbit 前缀 b 指针 前缀 p  L( L6 a( W1 O9 s" f# H
0 p8 x- Q! o2 y/ o
例:ucReceivData 接收数据
5 P7 s- U# j5 ^# f$ Y% ?3、结构体命名:
6 s2 [( r+ y) X5 C) N' b6 f" v: ^# J6 @& j* [
4、函数的命名:
' X3 l. X  T" \3 p( M6 C6 `9 k# y/ k函数名首字大写,若包含有两个单词的每个单词首字母大写。( v' A: n* n% i
函数原型说明包括:引用外来函数及内部函数,外部引用必须在右侧注明函数来源: 模块名及文件名, 内部函数,只要注释其定义文件名;
4 {0 w  Q- n; ^' ^! j3 I8 u, _" Q
! }8 K' F  M# j' M三、编辑风格- l$ }) E2 i2 J" z- h0 r- t9 ^

6 D" D& a" ^* W, R1、缩进:缩进以 Tab 为单位,一个 Tab 为四个空格大小。预处理语句、全局数据、函数原型、标题、附加说明、函数说明、标号等均顶格书写。语句块的“{”“}”配对对齐,并与其前一行对齐;6 k) }6 l4 o5 D: g  ^# U6 e  g
3 `1 K2 H* C: U
2、空格:数据和函数在其类型,修饰名称之间适当空格并据情况对齐。关键字原则上空一格,如: , @2 ~1 J0 p  W% v9 ?
if ( ... ) 等,运算符的空格规定如下:“->”、“[”、“]”、“++”、“--”、“~”、“!”、“+”、“-”(指正负号),“&”(取址或引用)、“*”(指使用指针时)等几个运算符两边不空格(其中单目运算符系指与操作数相连的一边),其它运算符(包括大多数二目运算符和三目运算符“?:”两边均空一格,“(”、“)”运算符在其内侧空一格,在作函数定义时还可据情况多空或不空格来对齐,但在函数实现时可以不用。“,”运算符只在其后空一格,需对齐时也可不空或多空格,对语句行后加的注释应用适当空格与语句隔开并尽可能对齐。" w/ S$ W& M8 ]0 x% r

% g, Y( d5 V5 `6 h! ^- D% h9 w3、对齐:原则上关系密切的行应对齐,对齐包括类型、修饰、名称、参数等各部分对齐。另每一行的长度不应超过屏幕太多,必要时适当换行,换行时尽可能在“,”处或运算符处,换行后最好以运算符打头,并且以下各行均以该语句首行缩进,但该语句仍以首行的缩进为准,即如其下一行为“{”应与首行对齐。
" r  s$ h( |. m2 q( P$ ^
3 U* u+ u9 ~& y7 v* W4、空行:程序文件结构各部分之间空两行,若不必要也可只空一行,各函数实现之间一般空两行( y9 Y7 |1 B( ]# H

6 }  J3 X9 c4 i, g5、修改:版本封存以后的修改一定要将老语句用/* */ 封闭,不能自行删除或修改,并要在文件及函数的修改记录中加以记录。
. F$ [1 T" d! M. J# X& O" _& h( O1 C; Z1 u! v; X
6、形参:在定义函数时,在函数名后面括号中直接进行形式参数说明,不再另行说明。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 支持!支持! 反对!反对!

159

主题

527

帖子

1197

积分

四级会员(40)

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

积分
1197
2#
发表于 2016-8-9 16:38 | 只看该作者
楼主辛苦了!
8 Y4 R! s3 A* _2 o! j* v

211

主题

652

帖子

1507

积分

四级会员(40)

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

积分
1507
3#
发表于 2016-8-10 09:29 | 只看该作者
谢谢分享,必须赞一个~5 U* d0 P8 ?' ~) n. {1 `+ s
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

巢课

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

GMT+8, 2025-7-29 22:04 , Processed in 0.097725 second(s), 29 queries , Gzip On.

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

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

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