在.h/.cpp的开头应有一段格式统一的说明,内容包括:
xxxxxxxxxx
例:
/**********/
/**@file***/
/**@brief**/
/**@author*/
/**@date***/
/**********/
除非极其简单,否则对函数应有注释说明。内容包括:功能、入口/出口参数,必要时还可有备注或补充说明。
每行代码的长度推荐为80列,最长不得超过120列;折行以对齐为准。
xxxxxxxxxx
例:
HANDLE CSOpenFile(const char cszFileName[],
int nMode);
或者:
BOOL CSReadFile(
HANDLE hFile,
void *pvBuffer,
int nReadSize,
int *pnReadSize
);
循环、分支代码,判断条件与执行代码不得在同一行上。
xxxxxxxxxx
例:正确:
if (n == -2)
n = 1;
else
n = 2;
不得写做:
if (n == -2) n = 1;
else n = 2;
指针的定义,* 号既可以紧接类型,也可以在变量名之前。
xxxxxxxxxx
例:
可写做:int* pnsize;
也可写做:int *pnsize;
但不得写做:int * pnsize;
在类的成员函数内调用非成员函数时,在非成员函数名前必须加上“::”。
函数入口参数有缺省值时,应注释说明。
xxxxxxxxxx
例:
BOOL KSSaveToFile(const char cszFileName[],BOOL bCanReplace /* = TRUE */);
else if 必须写在一行。
与‘{’、‘}’有关的各项规定:
‘{’‘}’应独占一行,在该行内可有注释(如果没有独占一行,那么它的下一行必须是个空行(空行上可以放注释),‘{’前必须有一个空格
xxxxxxxxxx
例:正确:
for (i = 0; i < cbLine; i++)
{ // .....
printf("Line %d:", i);
printf("%s\n", pFileLines);
}
for (i = 0; i < cbLine; i++) {
// .....
printf("Line %d:", i);
printf("%s\n", pFileLines);
}
不得写做:
for (i = 0; i < cb; i++)
{printf("Line %d:", i);
printf("%s\n", pFileLines);}
‘{’之后的代码必须缩进一个Tab。‘{’与‘}’必须在同一列上。
xxxxxxxxxx
例:正确:
if (i > 0) {
m = 1;
n++;
}
不得写做:
if (i > 0) {
m = 1;
n++;
}
例外:
if (i == 0)
{ ASSERT(FALSE); return; }
在循环、分支之后若只有一行代码,虽然可省略‘{’、‘}’,但不推荐这么做。若省略后可能引起歧义,则必须加上‘{’、‘}’。
与空格有关的各项规定。
在所有两目、三目运算符的两边都必须有空格。在单目运算符两端不必空格。但在‘->’、‘::’、‘.’、‘[’、‘]’等运算符前后,及‘&’(取地址)、‘*’(取值)等运算符之后不得有空格。
xxxxxxxxxx
例:正确:
int n = 0, nTemp;
for (int i = nMinLine; i <= nMaxLine; i++)
不得写做:
int n=0, nTemp;
for ( int i=nMinLine; i<=nMaxLine; i++ )
for、while、if 等关键词之后应有1个空格,再接‘(’,之后无空格;在结尾的‘)’前不得有空格。
xxxxxxxxxx
例:正确:
if (-2 == n)
不得写做:
if(-2 == n)
或
if ( -2 == n )
调用函数、宏时,‘(’、‘)’前后不得有空格。
xxxxxxxxxx
例:正确:
printf("%d\n", nIndex);
不得写做:
printf ("%d\n", nIndex);
printf( "%d\n", nIndex );
类型强制转换时,‘(’‘)’前后不得有空格
xxxxxxxxxx
例:可写做:
(KSFile*)pFile;
也可写做:
(KSFile *)pFile
不得写做:
( KSFile* )pFile
( KSFile * ) pFile
与缩进有关的各项规定
缩进以 Tab 为单位。1 个 Tab 为 4 个空格
下列情况,代码缩进一个 Tab:
函数体相对函数名及‘{’、‘}’。
xxxxxxxxxx
例:
int Power(int x)
{
return (x * x);
}
if、else、for、while、do 等之后的代码。
一行之内写不下,折行之后的代码,应在合理的位置进行折行。若有 + - * / 等运算符,则运算符应在上一行末尾,而不应在下一行的行首。
下列情况,不必缩进:switch 之后的 case、default。
xxxxxxxxxx
例:
switch (nID)
{
case ID_PLAY:
......
break;
case ID_STOP:
......
break;
default:
......
break;
}
匈牙利命名法:
基本原则是:
Camel命名法(即骆驼式命名法):
基本原则是:
Pascal命名法:
基本原则是:
除了异常类等个别情况(不希望用户把该类看作一个普通的、正常的类之情况)外,C++类/结构的命名应该遵循以下准则:
C++类/结构的命名
推荐的组成形式 *类的命名推荐用"名词"或"形容词+名词"的形式,例如:"CAnalyzer", "CFastVector" ....
不同于C++类的概念,传统的C结构体只是一种将一组数据捆绑在一起的方式。传统C结构体的命名规则为:
传统C结构体的命名
变量应该是程序中使用最多的标识符了,变量的命名规范可能是一套C++命名准则中最重要的部分:
变量的命名
格式
作用域前缀
类型前缀
推荐的组成形式
前缀 | 说明 |
---|---|
无 | 局部变量 |
m_ | 类的成员变量(member) |
sm_ | 类的静态成员变量(static member) |
s_ | 静态变量(static) |
g_ | 外部全局变量(global) |
sg_ | 静态全局变量(static global) |
gg_ | 进程间共享的共享数据段全局变量(global global) |
前缀 | 说明 |
---|---|
n | 整型和位域变量(number) |
e | 枚举型变量(enumeration) |
c | 字符型变量(char) |
b | 布尔型变量(bool) |
f | 浮点型变量(float) |
u | 无符号(unsigned) |
p | 指针型变量和迭代子(pointer) |
lp | 长指针型变量和迭代子(long pointer) |
pfn | 特别针对指向函数的指针变量和函数对象指针(pointer of function) |
g | 数组(grid) |
str | 字符串(string) |
i | 类的实例(instance)对于经常用到的类,也可以定义一些专门的前缀,如:std::string和std::wstring类的前缀可以定义为"st"std::vector类的前缀可以定义为"v"等等。 |
C++中引入了对常量的支持,常量的命名规则如下:
常量的命名
枚举、联合及typedef语句都是定义新类型的简单手段,它们的命名规则为:
枚举、联合、typedef的命名
缩写 | 全称 |
---|---|
addr | Address |
adm | Administrator |
app | Application |
arg | Argument |
asm | assemble |
asyn | asnychronization |
avg | average |
DB | Database |
bk | back |
bmp | bitmap |
btn | Button |
buf | Buffer |
calc | Calculate |
char | Character |
chg | Change |
clk | Click |
clr | color |
cmd | Command |
cmp | Compare |
col | Column |
coord | coordinates |
cpy | copy |
ctl/ctrl | Control |
cur | Current |
cyl | Cylinder |
dbg | Debug |
dbl | Double |
dec | Decrease |
def | default |
del | Delete |
dest/dst | Destination |
dev | Device |
dict | dictionary |
diff | different |
dir | directory |
disp | Dosplay |
div | Divide |
dlg | Dialog |
doc | Document |
drv | Driver |
dyna | Dynamic |
env | Environment |
err | error |
ex/ext | Extend |
exec | execute |
flg | flag |
frm | Frame |
func/fn | Function |
grp | group |
horz | Horzontal |
idx/ndx | Index |
img | Image |
impl | Implement |
inc | Increase |
info | Information |
init | Initial / Initialize / Initializatioin |
ins | Insert |
inst | Instance |
INT / intr | Interrupt |
len | Length |
lib | Library |
lnk | Link |
log | logical |
lst | List |
max | maximum |
mem | Memory |
mgr / man | Manege / Manager |
mid | middle |
min | minimum |
msg | Message |
mul | Multiply |
num | Number |
obj | Object |
ofs | Offset |
org | Origin / Original |
param | Parameter |
pic | picture |
pkg | package |
pnt / pt | Point |
pos | Position |
pre / prev | previous |
prg | program |
proc | Process / Procedure |
prop | Properties |
psw | Password |
ptr | Pointer |
pub | Public |
rc | rect |
ref | Reference |
reg | Register |
req | request |
res | Resource |
ret | return |
rgn | region |
scr | screen |
sec | Second |
seg | Segment |
sel | Select |
src | Source |
std | Standard |
stg | Storage |
stm | Stream |
str | String |
sun | Subtract |
sum | summation |
svr | Server |
sync | Synchronization |
sys | System |
tbl | Table |
temp / tmp | Temporary |
tran / trans | translate / transation / transparent |
tst | Test |
txt | text |
unk | Unknown |
upd | Update |
upg | Upgrade |
util | Utility |
var | Variable |
ver | Version |
vert | Vertical |
vir | Virus |
wnd | Window |
参考: