C语言程序书写规范
我做C语言底层开发,积累了一些代码书写的经验供大家参考:
1.C语言书写规范
1.1符号命名规则
1.1.1符号名包括模块名、常量名、标号名、子程序名等。这些名字应该能反映它所代表的实际东西,具有一定的意义,使其能够见名知义,有助于对程序功能的理解。命名采用匈牙利命名法。规则如下:
(1)所有宏定义、枚举常数和const变量,用大写字母命名。在复合词里用下划线隔开每个词。
(2)复合词中每个单词的第一个字母大写。除了规则5.1.1.1以外,避免使用下划线。
(3)类、类型定义和枚举型名的第一个字母大写。
(4)函数名是复合词的,第一个词采用全部小写,随后每个单词采用第一个字母大写,其它字母小写方式;如果是单个词的,采用全部小写方式。
(5)循环变量可采用i, j, k等,不受上述规则限制。
(6)类的成员变量应采用m_开头。
(7)全局变量词头为g_。
(8)临时变量词头为tmp_。
(9)对结构体内的变量命名,遵循变量的具体含义命名原则。
(10)用小写字母的前缀表示变量的类型,前缀的下一个字母用大写。
表 1
词头类型
|
简写
|
词头类型
|
简写
|
char
|
ch
|
structure
|
st
|
long
|
l
|
ASCII string
|
sz
|
integer
|
i
|
byte
|
by
|
unsigned
|
u
|
short int
|
n
|
boolean
|
b
|
DWORD
|
dw
|
pointer
|
p
|
function
|
fn
|
double
|
d
|
handle x
|
hx
|
string
|
s
|
handle y
|
hy
|
表 2
词头变量名词
|
变量名
|
词头变量名词
|
变量名
|
task
|
task
|
semaphores
|
sm
|
watchdog
|
wd
|
timer
|
tm
|
mutual exclusion
|
mutex
|
Counting semaphores
|
sc
|
message
|
msg
|
pipe
|
pipe
|
例:
#defineARRAY_SIZE 24
/*规则5.1.1.1*/
intg_iFlag;
classMyClass
/*规则5.1.1.3*/
{
};
voidsomeFunc( ) /*规则5.1.1.2和5.1.1.4*/
{
int nArray[ARRAY_SIZE];
unsigned char uchByte;
char szName[ ];
char *pszName = szName;
}
(11)有些词头(如p和u)可以和其它词头组合。
例:WDOG_ID
wdId;
WDOG_ID g_wdId; /*全局watchdog Id,故以g_开头*/
1.1.2名字的长度一般不要过长或过短。过长的名字会增加工作量,使程序逻辑流程变得模糊;过短的名字无法表达符号的实际意义。约定长度范围:3-31
1.2数据和函数说明
1.2.1数据说明次序应当规范化,使数据属性容易查找,也有利于测试、排错和维护。说明的先后次序应固定,应按逻辑功能排序,逻辑功能块内建议采用下列顺序:整型说明、实型说明、字符说明、逻辑量说明。
1.2.2如果设计了一个复杂的数据结构,应当通过注释对其变量的含义、用途进行说明。
1.2.3在函数的声明中使用异常声明。
如:void f()throw(toobig,toosmall, divzero);
在声明一个函数时,将它所抛出的异常列出,便于函数的使用者了解可能会发生哪些异常。
1.3
程序注释
1.3.1程序注释是程序员与日后的程序读者之间通信的重要手段之一,注释分为文件注释、函数注释和功能注释。
1.3.2正规程序的注释应注意:
——注释行的数量占到整个源程序的1/3到1/2。
1.3.3文件注释位于整个源程序的最开始部分,注释后空两行开始程序正文。它包括:
——程序标题。
——目的、功能说明。
——文件作者、最后修改日期等说明。
例:
./********************************************************************
(空一行)
标题:
Demo.c
功能:
测试VxWorks的各种系统调用.
说明:
该程序测试各种VxWorks的系统调用函数。包括任务(taks)的创建、挂起及任务间通过信号灯实现同步,通过消息队列进行通讯。
程序创建了两个任务:一个高优先级的任务和一个低优先级的任务。两个任务间通过一个二进制的信号灯进行同步,通过消息队列进行通讯。
当前版本: x.x
修改信息: 2000.06.05
John, Initial Version
2000.07.05 Tom,Bugxxxx fixed
**************************************************************/
(空2行,开始程序正文)
1.3.4函数注释通常置于每函数或过程的开头部分,它应当给出函数或过程的整体说明对于理解程序本身具有引导作用。一般包括如下条目:
——模块标题。
——有关本模块功能和目的的说明。
——调用格式
——接口说明:包括输入、输出、返回值、异常。
——算法。如果模块中采用了一些复杂的算法。
例:
file://(/注释开头应和上一函数空两行)
(注释开头与上一函数最后一行间隔两行)
/********************************************************************
标题:assignmentComplete
功能:BSC=>MSC消息生成函数,生成assignment_complete指配完成消息(BSMAP消息)
.
格式:
intassignmentComplete(int iCellId, intiServiceChannnelNum, char *pszMSGData)throw(exception1, exception2)
输入:
intiCellId: MS所在的小区识别
iCellId取值:0x00-——0xff
intiServiceChannnelNum:MS所占的业务信道号码
输出:
char * pszMSGData:指配完成消息数据
返回值:
0x00正常
异常:exception1异常情况1, exception2异常情况2
********************************************************************/
(
注释后直接开始程序正文,不空行。)
1.3.5功能性注释嵌在源程序体中,用于描述其后的语句或程序段做什么工作,也就是解释下面要做什么,或是执行了下面的语句会怎么样。而不要解释下面怎么做,因为解释怎么做常常与程序本身是重复的。
例:
/*把 amount加到 total中*/
total =amount + total;
这样的注释仅仅是重复了下面的程序,对于理解它的工作并没有什么作用。而下面的注释,有助于读者理解。
/*将每月的销售额amount加到年销售额total中*/
total =amount + total;
1.4
函数编写应尽可能短小精悍,一般不超过两屏,以便于调试和理解。
1.5语句结构
为保证语句结构的清晰和程序的可读性,在编写软件程序时应注意以下几个方面的问题:
——在一行内只写一条语句,并采用空格、空行和移行保证清楚的视觉效果。
——每一个嵌套的函数块,使用一个TAB缩进(可以设定为4个空格),大括号必须放在条件语句的下一行,单独成一行,便于匹对:
如,有一段程序如下:
for(i=1;i<n-1;i++){t=1;for(j=i+1;j<n;j++){
if(a[j]<a[t]) t=j; if(t!=i){work=a[t];a[t]=a[I];a[I]=work;}}}
应写为
for( i=1;i<n-1; i++)
{
t=1;
for(j = i+1; j<n; j++)
{
if(a[i]<a[j])
t=j;
if(t!=1)
{
work=a[t];
a[t]=a[i];
a[i]=work;
}
}
}
——文件之中不得存在无规则的空行,比如说连续十个空行。
一般来讲函数与函数之间的空行为2-3行;
在函数体内部,在逻辑上独立的两个函数块可适当空行,一般为1-2行。
——程序编写首先应考虑清晰性,不要刻意追求技巧性而使得程序难以理解。
——每行长度尽量避免超过屏幕宽度,应不超过80个字符。
——除非对效率有特殊要求,编写程序要作到清晰第一,效率第二。
——尽可能使用函数库。
——尽量用公共过程或子程序去代替重复的功能代码段。要注意,这个代码应具有一个独立的功能,不要只因代码形式一样便将其抽出组成一个公共过程或子程序。
——使用括号清晰地表达算术表达式和逻辑表达式的运算顺序。如将 x=a*b/c*d写成
x=(a*b/c)*d可避免阅读者误解为x=(a*b)/(c*d)。
——避免不必要的转移。
——避免采用过于复杂的条件测试。
——避免过多的循环嵌套和条件嵌套。
——建议不要使用 *=,^=, /=等运算符。
——一个函数不要超过200行。一个文件应避免超过2000行。
——尽量避免使用go to语句。
——避免采用多赋值语句,如x = y = z ;
——不鼓励采用?:操作符,如z = (a>b)?a:b;
——不要使用空的if else语句。如
if(cMychar>= ‘A’)
if(cMychar<= ‘Z’)
printf(“Thisis a letter /n”);
else
printf(“Thisis not a letter /n”);
else到底是否定哪个if容易引起误解。可通过加{}避免误解。
——尽量减少使用“否定”条件的条件语句。如:
把 if( !( (cMychar<’0’)||(cMychar>’9’) ) )
改为if((cMychar>=’0’)&& (cMychar<=’9’) )
11年前的一篇博文,重新整理了下,可借鉴的地方很多!
分享到:
相关推荐
### C语言格式书写规范知识点详解 #### 一、文件结构 ...总之,遵循C语言格式书写规范对于提高代码质量、增强程序的可读性和维护性至关重要。开发者应当注重这些规范的应用,以构建更加健壮、易于维护的软件系统。
### C语言书写规范详解 #### 1. 符号命名规则 C语言作为一种广泛应用的编程语言,其代码的可读性和可维护性至关重要。合理的命名规范不仅有助于代码的自我解释,还能提高团队协作效率。本节将详细介绍C语言中的...
C语言程序编码规范是软件开发过程中非常重要的一个环节,它为程序员提供了统一的代码书写标准,确保了代码的可读性、可维护性和团队协作效率。以下是对C语言程序编码规范的一些关键点的详细说明: 1. **命名规则**...
C语言程序设计规范 摘要:本文档提供了一份详细的C语言程序设计规范,涵盖了程序块的缩进风格、代码的注释、标识符的命名、代码的可读性等多个方面。该规范旨在提高代码的可读性和维护性,使开发人员能够更好地理解...
本文档提供了C语言书写规范的指南,旨在帮助程序员编写高质量的C语言程序。本指南涵盖了C语言程序的文件结构、头文件的结构、定义文件的结构、头文件的作用、目录结构等重要方面。 文件结构 C语言程序通常分为两个...
### 书写C语言程序的注意事项 在学习与实践C语言编程的过程中,正确地书写程序不仅是技术上的要求,更是提升代码可读性和维护性的关键。本文将深入探讨几个重要的C语言编程注意事项,帮助开发者们写出更加规范、...
【C语言书写规范】 在C语言编程中,良好的书写规范对于代码的可读性和可维护性至关重要。本文将深入探讨C语言的命名规则、数据和函数的说明、以及程序注释的标准做法。 **1. 符号命名规则** 1.1.1 符号名的选择应...
《C语言书写规范》是软件工程实验室(SEL)发布的一份文档,旨在为使用C语言在飞行动力学部门环境中编写程序的程序员提供推荐的实践和风格指南。这份文档由NASA/GSFC的软件工程分支、马里兰大学计算机科学系和计算机...
书写程序时应遵循的规则,强调了良好的编程规范,如适当的命名、注释、缩进等,这对于编写可读性和可维护性高的代码至关重要。 C语言的字符集涵盖了ASCII字符集,包括字母、数字、标点符号和控制字符,这些都是构建...
C语言程序结构主要包括源程序的基本部分和书写格式。每个C语言程序至少包含一个主函数(main()),它是程序执行的起点。程序的基本单位是函数,每个函数由声明部分和执行部分组成,声明部分定义变量,执行部分包含...
《C语言书写规范》是为初学者提供的一份详尽指南,旨在帮助他们按照标准和最佳实践编写C语言代码。这份文档由美国国家航空航天局(NASA)戈达德太空飞行中心(Goddard Space Flight Center)的软件工程实验室...
本文将深入探讨C语言的书写规范,特别是符号命名规则,以帮助开发者形成良好的编码习惯。 1. 符号命名规则 1.1.1 模块名 模块名应清晰地反映出模块的功能或作用。通常,采用大驼峰命名法(CamelCase),将每个单词...
### C语言程序讲义知识点概览 #### 一、C语言概述 - **发展过程**:C语言由Dennis Ritchie在20世纪70年代初于贝尔实验室开发,最初是为了编写UNIX操作系统而设计的。它的发展经历了多个阶段,从最初的Unix V1版本...