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

谈谈C51的编程规范

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
现在单片机的程序设计,C51已经得到广泛的推广和应用,算是单片机的主流设计程序,甚至可以说作为单片机开发人员必须要掌握的一门语言了。/ K) M0 G: W9 t) g: |. O! G7 s

  y. C& `5 g- i- L, A/ Q7 X    作为一门工具,最终的目的就是实现功能。在满足这个前提条件下,我们希望我们的程序能很容易地被别人读懂,或者能够很容易地读懂别人的程序,在团体合作开发中就能起到事半功倍之效。在网上请求帮助时,如能以规范的写法贴出程序,网友会比较容易地明白你的问题,则会比较快的得到网友的帮助,否则让人看上半天也不明所以然,这样就达不到预期的效果了。因此,为了便于源程序的交流,减少合作开发中的障碍,希望大家能够探讨一下C51的编程规范。把各人认为好的建议提出来,然后做一个总结,作为一种大家一致认同的规范,我认为将会是一件很有意义的事。我先提出一些自已的想法,以此抛砖引玉。
* Y5 q& p( L0 ]
! N3 p& G$ T" m6 S- m, r一、注释
+ E6 l, p; N. B) n, b. A+ F  T- K" e4 ~* g2 U8 u
1,采用中文;
9 c! i9 i5 p. {; i! [2,开始的注释:( B5 g, }2 {/ g9 h0 T9 m; H/ A

0 j! \# t1 f" ^$ B: ~3 k文件(模块)注释内容:
& [- y3 T4 a/ ^. x) Y公司名称、版权、作者名称、修改时间、模块功能、背景介绍等,复杂的算法需要加上流程说明;% n/ u: q# W$ J* p" M6 X) [
- B, \+ e2 {' N1 b
比如:
/ K  Q9 H0 l! a7 u- D9 U5 j/*********************************************************************/
1 x4 C6 y8 [5 r" }; v! G/*公司名称: */% M) W! s( C6 s. e
* H5 [# P( {: V  @: \
/*模 块 名: LCD 模块 LCD 型号:HD44780 */, N2 X* z: P. v) p
) D8 I5 K- {: N/ d, f
/*创 建 人:zhaojunjie 日期:2001-06-08 */4 Z* ]; A% c. [$ G, n; ?
/*修 改 人: 日期:2001-06-08 */ ; a7 W( V8 f4 \/ x2 M. T' k/ W- {
/*功能描述: */: y4 `) x) X. I' W) }' a8 r
/*其他说明: */2 a# a# i, b4 f( Q0 K$ K
/*版 本:5 _. {: W: T' X
/**********************************************************************/1 X" U8 v8 }0 F. I

/ T8 }  j1 ?6 t1 l  y# f; R函数开头的注释内容:/ ~. v0 j; e/ a+ c( z' F& l
函数名称、功能、说明 输入、返回、函数描述、流程处理、全局变量、调用样例等,复杂的函数需要加上变量用途说明;" }4 W$ A* |, @) g. {6 r

6 X5 N/ Q2 p" Y( ^! ]/*********************************************************************
, R. N7 |+ v& W' s& f3 l*
4 D2 ~6 k4 H, q3 f. [" i& H* 函 数 名: v_LcdInit5 t, Z. R' @6 W* c" l6 Y# X( v* |
* 功能描述: LCD初始化9 @% O8 i, b, {& T5 U
* 函数说明: 初始化命令:0x3c, 0x08, 0x01, 0x06, 0x10, 0x0c$ m1 g0 E0 F# ]
* 调用函数: v_Delaymsec(),v_LcdCmd()1 Z3 ^0 J6 }. W" u7 `. E
* 全局变量:
1 {! r5 q; P5 Q" M8 h5 B- Q! v* 输 入: 无
3 i* I) M- b) Q# f( g" j/ Q* 返 回: 无, s# B7 L/ d$ W1 {% ~- ]4 b
* 设 计 者:zhao 日期:2001-12-09; y" ?/ y8 C9 v' N: g( H0 p5 K
* 修 改 者:zhao 日期:2001-12-091 J" j4 v1 [' c1 E, I# U/ j# m
* 版 本:0 J7 E1 ]9 T- l& L
***********************************************************************/
: H* @: d) H& [+ }( f0 Q4 |" @5 |7 h: L, X' j5 S' l+ ~
3、程序中的注释内容:
0 J6 p: D# z8 Q' e$ v" d9 C* Y4 ^' P! D! e, \6 a( K3 p6 f# J
修改时间和作者、方便理解的注释等。注释内容应简炼、清楚、明了,一目了然的语句不加注释。
. O: k4 V7 Z; \0 |7 k/ ~9 B! c7 o5 a
4 |, H7 c0 e5 M. |8 `二、命名:
6 c! W( D( c7 A6 a- k+ A5 M, }4 y1 j6 T3 Y
命名必须具有一定的实际意义。% b7 H7 q+ o3 S7 {" P

. V( E) G' J, t+ h: a& m- z1、常量的命名:全部用大写。
& @- P6 }8 ]& p0 j+ Y1 Q+ Z& r/ A' ^- h$ N
2、变量的命名:# c. a3 r* e2 @* O
变量名加前缀,前缀反映变量的数据类型,用小写,反映变量意义的第一个字母大写,其他小写。
" j  ~, t3 T& `5 Z" M7 L) }# K其中变量数据类型:
3 A+ V: D! i; o. Yunsigned char 前缀 uc signed char 前缀 sc
& Y' _* Y6 r: O8 q. aunsigned int 前缀 ui signed int 前缀 si
: K( X6 ?8 t/ v" ~5 Tunsigned long 前缀 ul signed long 前缀 sl" L  m: \8 @' c0 @' `' K) V  a% c. N
bit 前缀 b 指针 前缀 p7 q; Q8 x+ F7 F. Y

- d, I, x' @4 k例:ucReceivData 接收数据$ B! I# ?2 M" p. z6 O
3、结构体命名:
( J  d) q# ]% S) V. d' \5 |- i+ D  o6 I, f8 Q0 W
4、函数的命名:3 W0 _- y) t) @& A+ N5 v/ _, z
函数名首字大写,若包含有两个单词的每个单词首字母大写。
$ v0 B5 Y6 x. h2 p函数原型说明包括:引用外来函数及内部函数,外部引用必须在右侧注明函数来源: 模块名及文件名, 内部函数,只要注释其定义文件名;# P# U/ P0 d6 c* q! `
- e2 T0 A) _$ b5 q) r  T/ r# W
三、编辑风格  J% z: \1 k1 \
, j7 \/ _) P, z6 G
1、缩进:缩进以 Tab 为单位,一个 Tab 为四个空格大小。预处理语句、全局数据、函数原型、标题、附加说明、函数说明、标号等均顶格书写。语句块的“{”“}”配对对齐,并与其前一行对齐;
8 K  y. E4 o# u8 F9 t# [6 x
3 w3 Y/ j2 l! E( P) j( n$ N0 v, \2、空格:数据和函数在其类型,修饰名称之间适当空格并据情况对齐。关键字原则上空一格,如:
$ q3 ^1 G+ x1 u1 g2 l. Sif ( ... ) 等,运算符的空格规定如下:“->”、“[”、“]”、“++”、“--”、“~”、“!”、“+”、“-”(指正负号),“&”(取址或引用)、“*”(指使用指针时)等几个运算符两边不空格(其中单目运算符系指与操作数相连的一边),其它运算符(包括大多数二目运算符和三目运算符“?:”两边均空一格,“(”、“)”运算符在其内侧空一格,在作函数定义时还可据情况多空或不空格来对齐,但在函数实现时可以不用。“,”运算符只在其后空一格,需对齐时也可不空或多空格,对语句行后加的注释应用适当空格与语句隔开并尽可能对齐。. C3 \! n9 [) F% m0 t
$ T, g: m. l* V4 j
3、对齐:原则上关系密切的行应对齐,对齐包括类型、修饰、名称、参数等各部分对齐。另每一行的长度不应超过屏幕太多,必要时适当换行,换行时尽可能在“,”处或运算符处,换行后最好以运算符打头,并且以下各行均以该语句首行缩进,但该语句仍以首行的缩进为准,即如其下一行为“{”应与首行对齐。, U8 B. P1 x- C) f! I) G
0 _* r& \" p/ A) j" \
4、空行:程序文件结构各部分之间空两行,若不必要也可只空一行,各函数实现之间一般空两行2 }6 x2 ^+ t+ O" J8 o3 G2 ~. C
+ k; U) m0 e6 s: H
5、修改:版本封存以后的修改一定要将老语句用/* */ 封闭,不能自行删除或修改,并要在文件及函数的修改记录中加以记录。
, c7 G" w7 b6 t- N) e. `/ ~$ P1 Z! h' l' A. e7 f+ c1 l
6、形参:在定义函数时,在函数名后面括号中直接进行形式参数说明,不再另行说明。

该用户从未签到

2#
发表于 2016-8-9 16:38 | 只看该作者
楼主辛苦了!; D' {2 n1 P2 v1 O

该用户从未签到

3#
发表于 2016-8-10 09:29 | 只看该作者
谢谢分享,必须赞一个~
; f+ w, ?8 x; S4 x6 y

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-8-3 01:51 , Processed in 0.125000 second(s), 23 queries , Gzip On.

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

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

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