Ca's '[UNK] ' C + (C C)'

Submitted By Qiang-Fu
Words: 656
Pages: 3

酷柚C++代码规范

目录:
一、 命名规范 1
二、 排版规范 3
三、 注释规范 4
四、 工程配置规范。 6
五、 c++特性。 7
六、 规则之外。 7

1、 命名规范
最重要的一致性规则是命名管理,命名风格直接可以直接确定命名实体是:类型、变量、函
数、常量、宏等等,无需查找实体声明,我们大脑中的模式匹配引擎依赖于这些命名规则。
命名规则具有一定随意性,但相比按个人喜好命名,一致性更重要,所以不管你怎么想,规
则总归是规则。

1、命名应该有描述性,不要过度缩写(除一些循环体中循环计数)。 int wordCount;//good int n//bad int b//bad

2、文件命名应该全部小写,可使用_来分隔单词。cpp文件和h文件成对出现,模板函数除外。 my_useful_class.cpp//good my_useful_class.h//good
Bad_Style.h//bad

3、宏定义全部使用大写字母,可使用_分隔单词。
#define MAX_FILE_LEN 256 //good
#define Bad_Style//bad
#define BadStyle//bad

4、全局变量使用g开头,静态变量使用s开头。 常量使用k开头 const int kDaysInAWeek = 7; int gCountNum //good static char sBuf //good

5、类的成员变量使用m开头。静态成员变量使用sm开头 class MyClass
{
private: int mLineNumber;//good int smObjectNumber;//good int classType;//bad
}

6、函数命名开头字母使用大写。不使用_(推荐使用动宾结构)
Int GetFileLengh() //good
Int FileLength()//good
Int FileLengthGet();//bad
Int File_Length();//bad

7、类型命名每个单词以大写字母开头,不包含下划线:MyExcitingClass、MyExcitingEnum。
所有类型命名——类、结构体、类型定义(typedef)、枚举——使用相同约定。
class UrlTable //good
{
} class myStudent//bad
{
} enum UrlTableErrors//good
{
OK = 0,ERROR_OUT_OF_MEMORY,ERROR_MALFORMED_INPUT,
};

8、变量命名。变量使用小写字母开头,其它单词第一个字母大写,不使用_, string tableName;//good string table_Name//bad

9、枚举命名。枚举值应全部大写,单词间以下划线相连:MY_EXCITING_ENUM_VALUE,
枚举名称属于类型,因此大小写混合:UrlTableErrors。
enum UrlTableErrors
{
OK = 0,
ERROR_OUT_OF_MEMORY,ERROR_MALFORMED_INPUT,
};

10、命名空间命名。命名空间使用的名称是全小写的,其命名基于项目名称和目录结构。 namespace xstar3

2、 排版规范
代码风格和格式确实比较随意,但一个项目中所有人遵循同一风格是非常容易的,作为个人
未必同意下述格式规则的每一处,但整个项目服从统一的编程风格是很重要的,这样做才能
让所有人在阅读和理解代码时更加容易。

1、 行长度不要超过80,超过时使用换行,换行在在表达式低优先级处化分, perm_count_msg.head.len = NO7_TO_STAT_PERM_COUNT_LEN + STAT_SIZE_PER_FRAM * sizeof( _UL );

2、 函数实现不宜太长,一般不要超过50行。太大函数可考虑分隔。

3、 代码采用缩进风格写,缩进空格数据为4个,不推荐使用tab键缩进。

4、 程序块的分界符(如C/C++语言的大括号‘{’和‘}’)应各独占一行并且位于同一列,同时与引用它们的语句左对齐。在函数体的开始、类的定义、结构的定义、枚举的定义以及if、for、do、while、switch、case语句中的程序都要采用如上的缩进方式。 if(condition)//good { return ;
}
void example_fun(void)//good
{
} if (pUserCR == NULL) return;//bad

if(condition){//不推荐使用。
}
else{
}
4、在两个以上的关键字、变量、常量进行对等操作时,它们之间的操作符之前、之后或者前后要加空格;进行非对等操作时,如果是关系密切的立即操作符(如->),后不应加空格。
(a)比较操作符, 赋值操作符"="、 "+=",算术操作符"+"、"%",逻辑操作符"&&"、"&",位域操作符"<<"、"^"等双目操作符的前后加空格。 if (current_time >= MAX_TIME_VALUE) a = b + c; a *= 2; a = b ^ 2;

(b)"!"、"~"、"++"、"--"、"&"(地址运算符)等单目操作符前后不加空格。
*p = 'a'; // 内容操作"*"与内容之间 flag = !isEmpty; // 非操作"!"与内容之间 p = &mem; // 地址操作"&" 与内容之间 i++; // "++","--"与内容之间

(c)"->"、"."前后不加空格。 p->id = pid; // "->"指针前后不加空格

5、 一行只有一条语句 a = b + c; a++;//bad

3、 注释规范
注释虽然写起来很痛苦,但对保证代码可读性至为重要,下面的规则描述了应该注释什么、
注释在哪儿。当然也要记住,注释的确很重要,但最好的代码本身就是文档(self- documenting),类型和变量命名意义明确要比通过注释解释模糊的命名好得多。 1、 注释风格,注释放在代码的上面或左边,并将注释与其上面的代码用空行隔开。
注释符后加空格
Int size = 0;//列表的大小

// 圆周率
Const int kPI = 3.1415926

2、 供别人使用的接口必须详细注释(参照条例3)。

3、 全局变量必须详细注释,包括谁初始化,请会改变它。
//
Int g_CountUser = 0;
4、 函数注释,写清楚功能描述(@description),参数取值范围(@param ),返回值的取值范围(@return) ,注释描述功能而不是如何实现的。返回值有时如果有申请内存空间,要注释是否要释放。
/**
* @description取得ShapeGroup中Shape的数量
* @param group 不能为空,
* @return ShapeGroup中Shape的数量
*/
int GetShapeNumber(ShapeGroup* group)

5、 类注释,每个类的定义要附着描述类的功能,函数有调用的顺序依赖要说明。
/**************************************
*网络操作类,使用前请先调用Init
*
**************************************/ class NetEngine
{
public: void Init();
}

6、文件注释。
(a) 版权(copyright statement):如 Copyright 2008 Google Inc.;
(b) 许可版本(license boilerplate):为项目选择合适的许可证版本,如 Apache