有谁知道C语言程序的编程规范,给我概括一下,

Python06

有谁知道C语言程序的编程规范,给我概括一下,,第1张

1引言

1.1编写目的

在软件开发过程中,编码的工作量是相当大的,同一项目参与编程的人可能有各自编程的经验和习惯,不同风格的程序代码使维护工作变得复杂和困难。为了提高代码的可读性、系统的稳定性及降低维护和升级的成本,特编写本规范以统一各开发人员的编程工作。

1.2 适用对象

本规范适用于所有开发人员,包括应用程序、网页及数据库开发人员,及有关的程序测试人员。

1.3 引用标准

GB/T 11457 软件工程术语

GB 8566 计算机软件开发规范

GB 8567 计算机软件产品开发文件编制指南

2.编写要求

2.1一般代码规则

 可读性原则,这是评价程序质量的首选指标,宁可不要一些技巧也要保证程序的易读特性,不要因过分追求技巧而牺牲程序的可读性。

 功能独立性原则。每一程序块只完成一个独立的功能,反过来,每一独立的功能只在一程序块内完成,尽量低耦合、高内聚。

 提示说明应当简短且避免产生歧义。

 提示或警告信息应当具有向导性,能准确告诉用户错误原因及恢复方法。提示和警告对话框应当使用标准规范。

 快捷键的定义必须符合用户操作习惯。

 程序需要长时间处理或等待时,应当显示进度条并提示用户等待。

 一些敏感操作,如删除等操作在执行前必须提示用户确认。

2.2变量函数、过程、控件等命名规则

2.2.1 变量命名

变量命名采用[作用范围][数据类型][自定义名称]规则定义,并遵循匈牙利命名法。要求看到变量名就能直观的看出其范围和数据类型。

 匈牙利命名规则:

a Array 数组

b BOOL (int) 布尔(整数)

by Unsigned Char (Byte) 无符号字符(字节)

c Char字符(字节)

cb Count of bytes字节数

cr Color reference value 颜色(参考)值

cx Count of x (Short) x的集合(短整数)

dw DWORD (unsigned long) 双字(无符号长整数)

f Flags (usually multiple bit values) 标志(一般是有多位的数值)

fn Function 函数

g_ global全局的

h Handle 句柄

i Integer整数

l Long 长整数

lp Long pointer 长指针

m_Data member of a class 一个类的数据成员

n Short int 短整数

p Pointer 指针

s String字符串

sz Zero terminated String 以0结尾的字符串

tm Text metric文本规则

u Unsigned int 无符号整数

ul Unsigned long (ULONG) 无符号长整数

w WORD (unsigned short) 无符号短整数

x,yx, y coordinates (short)坐标值/短整数

v void 空

 作用范围:

范围 前缀 例子

全局作用域 g_ g_Servers

成员变量 m_ m_pDoc

局部作用域 无 strName

 数据类型

VC常用前缀列表

前缀 类型 描述例子

ch char 8位字符chGrade

ch TCHAR 16位UNICODE类型字符chName

b BOOL 布尔变量 bEnabled

n int 整型(其大小由操作系统决定) nLength

n UINT 无符号整型(其大小由操作系统决定) nLength

w WORD 16位无符号整型 wPos

l LONG 32位有符号整型 lOffset

dw DWORD 32位无符号整型 dwRange

p * 内存模块指针,指针变量pDoc

l p FAR* 长指针 lpDoc

lpsz LPSTR 32位字符串指针 lpszName

lpsz LPCSTR 32位常量字符串指针 lpszName

lpsz LPCTSTR 32位UNICODE类型常量指针 lpszName

h handle Windows对象句柄 hWnd

lpfn (*fn)() 回调函数指针 Callback Far pointer to

CALLBACK function lpfnAbort

2.2.2 函数、过程命名

函数或过程名的主体应该使用大小写混合形式,并且应该足够长以描述它的作用。而且,函数名应该以一个动词起首,如 InitNameArray 或 CloseDialog。对于频繁使用的或长的项,推荐使用标准缩略语以使名称的长度合理化。一般来说,超过 32 个字符的变量名在 VGA 显示器上读起来就困难了。当使用缩略语时,要确保它们在整个应用程序中的一致性。在一个工程中,如果一会儿使用 Cnt, 一会儿使用 Count,将导致不必要的混淆。

对于自行编写的函数,若是系统关键函数,则须在函数实现部分的上方标明该函数的信息,格式如下:

//======================================================

// 函 数 名:InsureHasOutputInfo

// 功能描述:确保有适当的输出信息

// 输入参数:nProductID:相应的产品ID

// 输出参数:void

// 创建日期:00-2-21

// 修改日期:00-2-21

// 作 者:***

// 附加说明:

//======================================================

2.2.3 用户定义类型

在一项有许多用户定义类型的大工程中,常常有必要给每种类型一个它自己的三个字符的前缀。如果这些前缀是以 "u" 开始的,那么当用一个用户定义类型来工作时,快速识别这些类型是很容易的。例如,ucli 可以被用来作为一个用户定义的客户类型变量的前缀。

注:对于非通用的变量,请在定义时加以注释说明,变量定义尽可能放在最开始处。

2.2.4 控件命名

应该用一致的前缀来命名对象,使人们容易识别对象的类型。

VC常用宏定义命名列表

前缀 符号类型符号例子范围

IDR_ 标识多个资源共享的类型 IDR_MAINFRAME 1~0x6FFF

IDD_ 对话框资源(Dialog) IDD_SPELL_CHECK 1~ 0x6FFF

HIDD_ 基于对话框的上下文帮助 HIDD_SPELL_CHECK 0x20001~0x26FF

IDB_ 位图资源(Bitmap) IDB_COMPANY_LOGO 1~0x6FFF

IDC_ 光标资源(Cursor) IDC_PENCIL1~0x6FFF

IDI_ 图标资源(Icon) IDI_NOTEPAD 1~0x6FFF

ID_、IDM_ 工具栏或菜单栏的命令项 ID_TOOLS_SPELLING 0x8000~0xDFFF

HID_ 命令上下文帮助 HID_TOOLS_SPELLING 0x18000~0x1DFFF

IDP_ 消息框提示文字资源 IDP_INVALID_PARTNO 8~0xDFFF

HIDP_ 消息框上下文帮助 HIDP_INVALID_PARTNO 0x30008~0x3DFFF

IDS_ 字符串资源(String) IDS_COPYRIGHT 1~0x7FFF

IDC_ 对话框内的控制资源 IDC_RECALC 8~0xDFFF

2.3源代码规则

2.3.1风格约定:采用缩进的格式保存程序的层次结构。要求能直观的看出循环、判断等层次结构。

每一个嵌套的函数块,使用一个TAB缩进(可以设定为4个空格),大括号必须放在条件语句的下一行,单独成一行,便于匹对反大括号应该在单独的一行,在大多数情况下反扩号应有注释内容。举例如下:

if(condition1)

{

while(condition2)

{

…..

…..

}//end while(condition2)

}//end if (condition1)

或者

if(condition1){

while(condition2){

….

….

}//end while(condition2)

}//end if(conditionl)

2.3.2在操作符的前后必须使用空格。

2.3.3在分隔数组下标和函数参数的逗号后面必须添上空格。

2.3.4严禁使用go to 语句。

2.3.5对数据库操作只能使用标准SQL语句,关键字必须使用大写(如SELECT、WHERE等),数据元素(表、字段、视图等)必须按照数据字典书写。

2.3.6程序代码中要有足够的容错处理功能。

对可能发生的异常统一采用C++抛出格式:

try

{

//可能引发异常的代码

throw t //手工抛出异常

}

catch(type_1 e) // type_1为类型定义符、如int、CException、_com_error

{

// type_1类型异常处理

}

catch(type_2 e)

{

// type_2类型异常处理

}

2.3.7程序代码结构必须层次清楚,适当使用空行分段。

2.3.8工程的版本控制要严格,版本格式为.me.ae.yy.mmdd,其中:[me]表示主版本号;[ae]表示辅版本号;[yy.mmdd]表示版本建立日期。高版本尽量兼容低版本的用法、数据或协议。

2.4文件的命名规则

2.4.1根据系统设计所规定的结构,建立相应的文件夹,根据需要建立子文件夹。

2.4.2文件夹和文件的名称应尽量能够表达其意义,尽量使用英文命名,绝对不能汉字。

2.4.3文件名称一般采用“xxx_yyy.ext”格式,xxx(3-4个字母)表示分类,yyy(字母数自定)表示操作 (如 “ /example/exp_edit.htm ”)

\

我从公司文档拷贝的!你自己看看对你有没有用!

C语言 程序代码编写规范

(初级程序员 讨论版)

前言

一个好的程序编写规范是编写高质量程序的保证。清晰、规范的源程序不仅仅是方便阅读,更重要的是能够便于检查错误,提高调试效率,从而最终保证软件的质量和可维护性。

说明

l 本文档主要适用于刚刚开始接触编程的初学者。

l 对于具有一定工程项目开发经验的程序员,建议学习C语言程序代码编写规范—高级版。

目录

1 代码书写规范

2 注释书写规范

3 命名规范

4 其它一些小技巧和要求

1 代码书写规范

1.1函数定义

花括号: { }

每个函数的定义和说明应该从第1列开始书写。函数名(包括参数表)和函数体的花括号应该各占一行。在函数体结尾的括号后面可以加上注释,注释中应该包括函数名,这样比较方便进行括号配对检查,也可以清晰地看出来函数是否结束。

范例1:函数的声明

void matMyFunction(int n)

{

……

} /* matMyFunction*/

1.2空格与空行的使用

要加空格的场合

l 在逗号后面和语句中间的分号后面加空格,如:

int i, j, k

for (i = 0i <ni++)

result = func(a, b, c)

l 在二目运算符的两边各留一个空格,如

a >ba <= b i = 0

l 关键字两侧,如if () …, 不要写成if() …

l 类型与指针说明符之间一定要加空格:

char *szName

不加空格的场合

l 在结构成员引用符号.和->左右两加不加空格:

pStud->szName, Student.nID

l 不在行尾添加空格或Tab

l 函数名与左括号之间不加空格:

func(…)

l 指针说明符号*与变量名间不要加空格:

int *pInt不要写成: int * pInt

l 复合运算符中间不能加空格,否则会产生语法错误,如:

a + = b a <= b都是错误的

空行与换行

l 函数的变量说明与执行语句之间加上空行

l 每个函数内的主要功能块之间加空行表示区隔

l 不要在一行中写多条语句.

范例2:空行与换行

int main()

{

int i, j, nSum = 0 //变量说明

for (i = 0i <10i++) //执行代码

{

for (j = 0j <10j++)

{

nSum += i

}

}

}

1.3缩进的设置

根据语句间的层次关系采用缩进格式书写程序,每进一层,往后缩进一层

有两种缩进方式:1,使用Tab键;2,采用4个空格。

整个文件内部应该统一,不要混用Tab键和4个空格,因为不同的编辑器对Tab键的处理方法不同。

1.4折行的使用

· 每行的长度不要超过80个字符,当程序行太长时,应该分行书写。

· 当需要把一个程序行的内容分成几行写时,操作符号应该放在行末。

· 分行时应该按照自然的逻辑关系进行,例如:不要把一个简单的逻辑判断写在两行上。

· 分行后的缩进应该按照程序的逻辑关系进行对齐。例如:参数表折行后,下面的行应该在参数表左括号的下方。

范例2:折行的格式

dwNewShape = matAffineTransform(coords, translation,

rotation)

if (((new_shape.x >left_border) &&

(new_shape.x <right_border)) &&

((new_shape.y >bottom_border) &&

(new_shape.y <top_border)))

{

draw(new_shape)

}

1.5嵌套语句(语句块)的格式

对于嵌套式的语句--即语句块(如,if、while、for、switch等)应该包括在花括号中。花括号的左括号应该单独占一行,并与关键字对齐。建议即使语句块中只有一条语句,也应该使用花括号包括,这样可以使程序结构更清晰,也可以避免出错。建议对比较长的块,在末尾的花括号后加上注释以表明该语言块结束。

范例3:嵌套语句格式

if (value <max)

{

if (value != 0)

{

func(value)

}

}

} else {

error("The value is too big.")

} /* if (value <max) */

2 注释书写规范

注释必须做到清晰,准确地描述内容。对于程序中复杂的部分必须有注释加以说明。注释量要适中,过多或过少都易导致阅读困难。

2.1注释风格

· C语言中使用一组(/* … */)作为注释界定符。

· 注释内容尽量用英语方式表述。

· 注释的基本样式参考范例4。

· 注释应该出现在要说明的内容之前,而不应该出现在其后。

· 除了说明变量的用途和语言块末尾使用的注释,尽量不使用行末的注释方式。

范例4:几种注释样式

/*

* ************************************************

* 强调注释

* ************************************************

*/

/*

* 块注释

*/

/* 单行注释 */

//单行注释

int i/*行末注释*/

2.2何时需要注释

· 如果变量的名字不能完全说明其用途,应该使用注释加以说明。

· 如果为了提高性能而使某些代码变得难懂,应该使用注释加以说明。

· 对于一个比较长的程序段落,应该加注释予以说明。如果设计文档中有流程图,则程序中对应的位置应该加注释予以说明。

· 如果程序中使用了某个复杂的算法,建议注明其出处。

· 如果在调试中发现某段落容易出现错误,应该注明。

3 命名规范

3.1常量、变量命名

l 符号常量的命名用大写字母表示。如:

#define LENGTH 10

l 如果符号常量由多个单词构成,两个不同的单词之间可以用下划线连接。如:

#define MAX_LEN 50

变量命名的基本原则:

l 可以选择有意义的英文(小写字母)组成变量名,使人看到该变量就能大致清楚其含义。

l 不要使用人名、地名和汉语拼音。

l 如果使用缩写,应该使用那些约定俗成的,而不是自己编造的。

l 多个单词组成的变量名,除第一个单词外的其他单词首字母应该大写。如:

dwUserInputValue。

3.2函数命名

函数命名原则与变量命名原则基本相同。对于初学者,函数命名可以采用“FunctionName”的形式。

4 其它一些小技巧和要求

l 函数一般情况下应该少于100行

l 函数定义一定要包含返回类型,没有返回类型加void

l 写比较表达式时,将常量放在左边

10 == n

NULL != pInt

l 指针变量总是要初始或重置为NULL

l 使用{}包含复合语句,即使是只有一行,如:

if (1 == a)

{

x = 5

}

http://home.ustc.edu.cn/~danewang/c/CodingStandards.html