团队编程规范
程序版式:
/************************************************************************\
* 函数名:
* 函数功能概述:
* 参数说明:
* 返回值说明:
* 修改记录:
\************************************************************************/
规则1:空行规则
1.1每个类声明、函数定义后需加一行空行
1.2函数体内,逻辑上密切相关的语句间无空行,其余地方需加空行
规则2:代码行规则
2.1 if、for、while、do、switch等各占一行,不论执行语句多少,均需加大括号。前大括号放在语句后,占一行。后大括号位于语句组结束处,占一行,大括号内的内容用Tab缩进一次
例:
unsigned int isEqualToInt( )
{
Statement;
}
2.2 定义变量时必须立刻对其进行初始化。
规则3:空格规则
3.1关键字之后要留空格。象const、virtual、inline、case 等关键字之后
至少要留一个空格,否则无法辨析关键字。象if、for、while 等关键字之后应留一个
空格再跟左括号‘(’,以突出关键字。
3.2函数名之后不要留空格,紧跟左括号‘(’,以与关键字区别。
3.3‘(’向后紧跟。‘)’、‘,’、‘;’向前紧跟,紧跟处不留空格。
3.4‘,’之后要留空格,如Function(x, y, z)。如果‘;’不是一行的结束
符号,其后要留空格,如for (initialization; condition; update)。
3.5赋值操作符、比较操作符、算术操作符、逻辑操作符、位域操作符,
如“=”、“+=” “>=”、“<=”、“+”、“*”、“%”、“&&”、“||”、“<<”,“^”等二元
操作符的前后应当加空格。
3.6一元操作符如“!”、“~”、“++”、“--”、“&”(地址运算符)等前后不
加空格。
3.7象“[]”、“.”、“->”这类操作符前后不加空格。
3.8对于表达式比较长的for 语句和if 语句,为了紧凑起见可以适当地去
掉一些空格,如
for (i=0; i<10; i++)
if ((a<=b) && (c<=d))
void Func1(int x, int y, int z); // 良好的风格
void Func1 (int x,int y,int z); // 不良的风格
if (year >= 2000) // 良好的风格
if(year>=2000) // 不良的风格
if ((a>=b) && (c<=d)) // 良好的风格
if(a>=b&&c<=d) // 不良的风格
for (i=0; i<10; i++) // 良好的风格
for(i=0;i<10;i++) // 不良的风格
for (i = 0; I < 10; i ++) // 过多的空格
x = a < b ? a : b; // 良好的风格
x=a<b?a:b; // 不好的风格
int *x = &y; // 良好的风格
int * x = & y; // 不良的风格
array[5] = 0; // 不要写成 array [ 5 ] = 0;
a.Function(); // 不要写成 a . Function();
b->Function(); // 不要写成 b -> Function();
规则4:长行拆分
4.1 代码由过多语句群组成时需进行拆分。要在低优先级操作符处拆分成新行,操作符放在新行之首(以便突出操作符)。拆分出的新行要进行适当的缩进,使排版整齐,语句可读。
如:
if ((very_longer_variable1 >= very_longer_variable12)
&& (very_longer_variable3 <= very_longer_variable14)
&& (very_longer_variable5 <= very_longer_variable16))
{
dosomething();
}
规则5 修饰符位置:应当将修饰符 * 和 & 紧靠变量名
例如:
char *name;
规则6 命名规则:
6.1变量名称约定:
精确描述变量意义(主),尽量简短(次),首单词首字母小写,其余单词首字母大写.
例:
unsigned int thisIsAnInteger ;
6.2函数名称:
精确描述变量意义(主),尽量简短(次),首单词首字母小写,其余单词首字母大写.
例:unsigned int isEqualToInt( ) ;
6.3宏定义名称:
全部大写,单词间用下划线连接。
6.4结构和联合定义
一律用typedef;struct名称全大写,重命名名称所有首字母大写
typedef struct PICTURELAYER {
;
}PictureLayer ;
编程注意事项:
不可将布尔变量直接与TRUE、FALSE 或者1、0 进行比较。
if (flag) // 表示flag 为真
if (!flag) // 表示flag 为假
应当将整型变量用“==”或“!=”直接与0 比较。不可模仿布尔变量的风格而写成
假设整型变量的名字为value,它与零值比较的标准if 语句如下:
if (value == 0)
if (value != 0)
不可将浮点变量用“==”或“!=”与任何数字比较。
假设浮点变量的名字为x,应当将
if (x == 0.0) // 隐含错误的比较
转化为
if ((x>=-EPSINON) && (x<=EPSINON))
其中EPSINON 是允许的误差。
应当将指针变量用“==”或“!=”与NULL 比较。
if (p == NULL) // p 与NULL 显式比较,强调p 是指针变量
if (p != NULL)
if语句补充说明
1、 注意使用三目运算符简化
2、 可使用NULL == p来防止错误
关于循环语句
在多重循环中,如果有可能,应当将最长的循环放在最内层,最短的
循环放在最外层,以减少CPU 跨切循环层的次数。
for (col=0; col<5; col++ )
{
for (row=0; row<100; row++)
{
sum = sum + a[row][col];
}
}
如果循环体内存在逻辑判断,并且循环次数很大,宜将逻辑判断移到循环体的外面。
关于for循环
如非特殊要求,for 语句的循环控制变量的取值采用“半开半闭区间”写法。
例如:半开半闭区间“0 =< x < N”,起点到终点的间隔为N,循
环次数为N。
关于switch
如果没有default,需加default : break;
关于goto语句
极其慎用。需要使用必须经过全队商讨批准。
关于函数
在函数体的“入口处”,对参数的有效性进行检查。
在函数体的“出口处”,对return 语句的正确性和效率进行检查。
注:
本文资源来自网络,经整理后发布。