C++编码规范Word文件下载.docx
- 文档编号:21415269
- 上传时间:2023-01-30
- 格式:DOCX
- 页数:25
- 大小:25.62KB
C++编码规范Word文件下载.docx
《C++编码规范Word文件下载.docx》由会员分享,可在线阅读,更多相关《C++编码规范Word文件下载.docx(25页珍藏版)》请在冰豆网上搜索。
_'
)
classNameOneTwo;
className;
1.3.类库(或程序库)命名(适用于C/C++)
使用命名空间防止名字冲突。
如果编译器没有实现命名空间,需要用前缀来避名名字冲突,不过前缀不要过长(2个字母比较好)。
JohnJohnson完成了一个数据结构的库,它可以使用JJ作为库的前缀,所以类名就象下面这样:
classJjLinkList
{
}
1.4.方法和函数的命名(适用于C++)
使用与类名相同的规则
classNameOneTwo
public:
int
DoIt();
void
HandleError();
1.5.类属性的命名(适用于C++)
属性(通常是非公有数据成员)名字以字母'
m'
开头。
在'
m(m_)'
后面,使用与类名相同的规则。
'
总是位于其它修饰符(如表示指针的'
p'
)的前面。
VarAbc();
ErrorNumber();
private:
mVarAbc;
mErrorNumber;
String*
mpName;
1.6.方法和函数参数的命名(适用于C++)
第一个字母必须小写。
第一个字母后面的单词使用与类名相同的规则。
StartYourEngines(
Engine&
rSomeEngine,
Engine&
rAnotherEngine);
1.7.局部变量的命名(适用于C/C++)
所有字母都用小写
使用下划线'
作为单词的分隔。
int
NameOneTwo:
:
HandleError(interrorNumber)
error=OsErr();
Time
time_of_error;
ErrorProcessorerror_processor;
1.8.指针变量的命名前缀(适用于C/C++)
指针变量多数情况应在前面加'
。
星号'
*'
应靠近类型,而不是变量名。
String*pName=newString;
特别的:
String*pName,name;
应分成两行来写:
String*pName;
String
name;
1.9.引用变量和返回引用函数的命名前缀(适用于C++)
引用必须用'
r'
作前缀修饰。
classTest
void
DoSomething(StatusInfo&
rStatus);
StatusInfo&
rStatus();
constStatusInfo&
Status()const;
//这里返回的是常量引用,所以不符合本规则
mrStatus;
1.10.
全局变量的命名前缀(适用于C/C++)
全局变量总是以'
g(g_)'
作为前缀。
Logger
g_Log;
Logger*g_pLog;
1.11.
全局常量的命名(适用于C/C++)
全局常量全部大写,并以下划线'
分隔单词。
constintA_GLOBAL_CONSTANT=5;
1.12.
静态变量的命名前缀(适用于C++)
静态变量以'
s'
staticStatusInfom_sStatus;
1.13.
自定义类型(typedef)的命名(适用于C/C++)
类型定义名称指的是用typedef定义的名称。
类型定义名称使用与类名相同的规则,并使用Type作为后缀。
typedefuint16
ModuleType;
typedefuint32
SystemType;
1.14.
宏定义的命名(适用于C/C++)
所有单词的字母都用大写,并使用下划线'
分隔.
#defineMAX(a,b)blah
#defineIS_ERR(err)blah
1.15.
C函数的命名(适用于C/C++)
C++项目中,应尽量少用C函数。
C函数使用GNU规范,所有字母都使用小写,并用下划线'
some_bloody_function()
特别的,为了赚容C/C++,在必要的时候,在C++中应以下面的格式定义C函数:
extern“C”intsome_bloody_function();
或在C/C++中推荐使用下面的格式:
#ifdef__cplusplus__
extern“C”{
#endif
1.16.
枚举的命名(适用于C/C++)
所有字母都大写,并用下划线'
作为单词分隔。
enumPinStateType
PIN_OFF,
PIN_ON
};
enum{STATE_ERR,
STATE_OPEN,STATE_RUNNING,STATE_DYING};
2.
排版规则
2.1.布局和模板
2.1.1.
类的布局模板(适用于C++)
请使用下面的模板来创建一个新的类:
/**
*
用一行来描述类
*
*#include"
XX.h"
<
BR>
*-llib
类的详细说明
*@seesomething
*/
#ifndef
SORUTION_PROJECT_CLASSNAME_H
#define
//
在这里包含系统头文件
//
在这里包含项目头文件
在这里包含局部头文件
在这里放置前置引用
class
XX
{
public:
类的生命周期控制函数,如构造和析构,以及状态机
/**
*Defaultconstructor.
*/
XX(void);
*Copyconstructor.
*
*@paramfromThevaluetocopytothisobject.
XX(const
XX&
from);
*Destructor.
virtual~XX(void);
在这里放置类的运算操作符
*Assignmentoperator.
*@paramfromTHevaluetoassigntothisobject.
*@returnAreferencetothisobject.
XX&
operator=(XX&
from);
在这里放置类的操作
在这里放置属性存取
在这里放置类的状态查询
protected:
private:
};
内联方法定义
外部引用
#endif
定义的顺序是:
public,protected,private
要清楚public/protected/private都应该放置哪些东西
2.1.2.
源文件格式(适用于C++)
#include
"
//classimplemented
///////////////PUBLIC///////////////////////
//=================
构造函数====================
XX:
XX()
}//XX
XX(const
~XX()
}//~XX
//===============
操作符=========================
);
return
*this;
}//=
//==============类的操作=====================
//==============属性存取=====================
//==============状态查询
=====================
/////////////PROTECTED
//////////////////
/////////////PRIVATE
2.1.3.
保护头文件不被重复包含(适用于C/C++)
应使用宏定义来保护头文件不被重复包含:
如果使用命名空间的时候,要把命名空间加到文件名前面:
SORUTION_PROJECT_NAMESPACE_CLASSNAME_H
#endif
2.1.4.
方法和函数的布局(适用于C/C++)
对于有较多参数的函数的写法
如果参数较多,一行写不下,我们应该分成几行来写,并且每个参数都另起一行对齐:
int
AnyMethod(
arg1,
arg2,
arg3,
arg4);
或
AnyMethod(
arg1
arg2
arg3
2.2.缩进、制表符以及空格(适用于C/C++)
缩进的时候,每一层缩进3,4,或8个空格。
(推荐使用4个空格)
不要使用TAB,用空格,大多数编辑器可以用空格代替TAB。
TAB应固定4个空格,因为大多数编辑器都是这么设置的。
虽然没有规定缩进的层次,但是4至5层是合适的。
如果缩进的层次太多,你可能需要考虑是否进行代码重构了。
void
func()
if
(somethingbad)
(anotherthingbad)
while
(moreinput)
}
2.3.尽量使一行不要超过78个字母(适用于C/C++)
有许多编辑器屏幕只有78个字母宽
2.4.保证一行只写一条语句(适用于C/C++)
一行最多只写一条语句
一行只定义一个变量
不要象下面这样:
char**a,*x;
intwidth,height;
//widthandheightofimage
要象这样:
char**a=0;
//文档说明
char*
x=0;
2.5.花括号{}规则(适用于C/C++)
2.5.1.
花括号的位置
在关键字的下一行单独放置括号,并且与关键字对齐,如:
(condition)
...
(condition)
…
2.5.2.
什么时候应使用花括号
所有的if,while和do语句,要么用单行格式,要么使用花括号格式。
使用花括号格式:
if(1==somevalue)
somevalue=2;
单行格式:
if(1==somevalue)somevalue=2;
或下面这样(对于这种写法,建议使用花括号):
somevalue=2;
2.5.3.
在花括号结束的位置加上注释
在花括号结束的位置加上注释是一个好习惯。
假如前后花括号距离很远,注释就能帮你理解它是如何对应的。
如:
while
(1)
(valid)
}
//ifvalid
else
//notvalid
}
//endforever
2.5.4.
注意屏幕大小
一个语句块尽量不超过一个屏幕大小,这样,不要卷动屏幕就可以阅读代码。
2.6.圆括号()规则(适用于C/C++)
圆括号与关键字之间应放一个空格。
圆括号与函数名之间不要有空格。
Return语句不要使用圆括号。
if(condition)
while(condition)
strcpy(s,s1);
return1;
2.7.ifelse语句的格式(适用于C/C++)
布局
if(条件)
//注释
elseif(条件)
else
条件格式
总是把常量放在等号或不等于号的左边:
if(6==errorNum)...
一个很重要的理由是,假如漏写一个等号,这种写法会产生一个编译错误,有助于马上发现问题。
比如:
if(errorNum==6)...
错写成:
if(errorNum=6)...//这是一个不容易发现的灾难
2.8.switch格式(适用于C/C++)
直通的case语句,应该放置一条注释说明这个case语句是直通到下一个case语句的。
总是要写default语句,不管是否是需要。
在case中需要定义变量的时候,应把所有代码放在语句块中。
switch
(...)
case
1:
继续执行case2
2:
{
v;
break;
default:
2.9.使用goto,continue,break和?
(适用于C/C++)
2.9.1.
Goto
尽量避免使用Goto语句。
一个合理使用goto语句的场合是,当你需要从多层循环中跳出。
for
(disaster)
goto
error;
//跳出循环
...
error:
cleanupthemess
跳转的标号必须单独在一行的最左边。
Goto语句需要有相应的注释,说明它的用途。
2.9.2.
ContinueandBreak
Continue和break实际上起到与goto一样的作用,因此,尽量少用为上。
并且,Continue与break最好不要连用。
2.9.3.
?
用括号把条件表达式括起来。
不要在?
:
中写上过多的代码,操作表达式应尽可能简洁。
操作语句应分行写,除非它们能够简洁的放在一行当中。
(condition)?
funct1():
func2();
(condition)
longstatement
anotherlongstatement;
2.10.
运算符号的规则(适用于C/C++)
一元操作符如(!
、~等等)应贴近操作对象。
if(!
IsOk)
return++v;
二元操作符如(+、*、%、==等等)应在前后留空格。
if(v1==v2)
returnv1*3;
++和--尽量使用前置运算。
在C++中,不管++i还是i++,总是++i更容易生成优化代码。
for(inti=0;
i<
10;
++i)
2.11.
变量声明语句块(适用于C/C++)
变量应该是随用随声明,不要集中在函数前(有些C语言不支持,则不在此要求之列)。
特别是在for语句的循环变量,应只在for语句中定义。
声明语句块必须要对齐
类型,变量,等号和初始化值要分别对齐。
DWORD
mDword;
DWORD*
mpDword;
char*
mpChar;
char
mChar;
mDword
=
0;
mpDword
=
NULL;
mpChar
mChar
3.
文档及注释
应当使用文档自动生成工具,来生成相关的程序文档。
3.1.文件或程序库的文档注释(适用于C/C++)
可以为整个文件编写文档。
/**@filefile.h
*Abrieffiledescription.
*Amoreelaboratedfiledescription.
3.2.类文档注释(适用于C/C++)
在类定义前面应加上类说明文档。
/**WindowsNT
@briefWindowsNiceTry.
@authorBillGates
@authorSeveralspeciesofsmallfurryanimalsgatheredtogether
ina
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 编码 规范
![提示](https://static.bdocx.com/images/bang_tan.gif)