2.1 空行
空行起着分隔程序段落的作用。空行得体(不过多也不过少)将使程序的布局更加清晰。空行不会浪费内存,虽然打印含有空行的程序是会多消耗一些纸张,但是值得。
所以不要舍不得用空行。
【规则 2-1-1】在每个类声明之后、每个函数定义结束之后都要加空行。参见示例2-1(a)
// 空行 void Function1(…) { … } // 空行 void Function2(…) { … } // 空行 void Function3(…) { … }
【规则 2-1-2】在一个函数体内,逻揖上密切相关的语句之间不加空行,其它地方应加空行分隔。参见示例 2-1(b )
// 空行 while (condition) { statement1; // 空行 if (condition) { statement2; } else { statement3; } // 空行 statement4; }
补充:单个函数是为了完成某些功能逻辑的,如果功能逻辑分为多步,建议使用双空行进行分割
int main(int argc, char * argv[]) { //初始化方位 float s = 34.63397; float w = 114.12389; float n = 38.79397; float e = 119.30389; char * szOpenFile = "E:\\detect_work\\Z_RADR_I_Z9531_20210705035903_O_DOR_SAD_CAP_FMT.bin.bz2"; char * ptr_basedata; char * outpng = argv[2]; szOpenFile = argv[1]; int DataByte; CDataStd std; //使用三方库解析产品文件 //根据位数大小创建缓冲区,用来存放基数据。 //校验雷达数据合理性,并加载内部类指针数据 //获取雷达基数据和任务配置、扫描配置信息. //计算雷达边界数据 //开始获取 全部的PPI仰角层数中的 基数据产品头中最大的//164-195 强度库数 //196-227 速度\谱宽库数 //创建二维数据矩阵存储产品信息 [方位][强度/速度] //创建完毕获取数据 std.get_data(&info, R, V, W, ZDR, KDP, PHI, CC, SNRH); //进行质量控制 return 0; }
2.2 代码行
【规则 2-2-1】一行代码只做一件事情,如只定义一个变量,或只写一条语句。这样的代码容易阅读,并且方便于写注释。
【规则 2-2-2】if、for、while、do 等语句自占一行,执行语句不得紧跟其后。不论执行语句有多少都要加{}。这样可以防止书写失误
示例 2-2(a)为风格良好的代码行
int width; // 宽度 int height; // 高度 int depth; // 深度 x = a + b; y = c + d; z = e + f; if (width < height) { dosomething(); } for (initialization; condition; update) { dosomething(); } // 空行 other();
,示例 2-2(b)为风格不良的代码行。
示例 2-2(a) 风格良好的代码行 示例 2-2(b) 风格不良的代码行
示例 2-2(a) 风格良好的代码行 示例 2-2(b) 风格不良的代码行 int width, height, depth; // 宽度高度深度 X = a + b; y = c + d; z = e + f; if (width < height) dosomething(); for (initialization; condition; update) dosomething(); other();
【建议 2-2-1】尽可能在定义变量的同时初始化该变量(就近原则)
如果变量的引用处和其定义处相隔比较远,变量的初始化很容易被忘记。如果引用
了未被初始化的变量,可能会导致程序错误。本建议可以减少隐患。例如
int width = 10; // 定义并初绐化 width
int height = 10; // 定义并初绐化 height
int depth = 10; // 定义并初绐化 depth
补充说明:
1. 在使用传入参数时,尽量先进行数据内容的校验。
2. 如果不确定有无合法参数,可以使用缺省值初始化形参。
2.3 代码行内的空格
【规则 2-3-1】关键字之后要留空格。象 const、virtual、inline、case 等关键字之后至少要留一个空格,否则无法辨析关键字。象 if、for、while 等关键字之后应留一个空格再跟左括号‘(’,以突出关键字。
【规则 2-3-2】函数名之后不要留空格,紧跟左括号‘(’,以与关键字区别。
【规则 2-3-3】‘(’向后紧跟,‘)’、‘,’、‘;’向前紧跟,紧跟处不留空格。
【规则 2-3-4】‘,’之后要留空格,如 Function(x, y, z)。如果‘;’不是一行的结束符号,其后要留空格,如 for (initialization; condition; update)。
【规则 2-3-5】赋值操作符、比较操作符、算术操作符、逻辑操作符、位域操作符,如“=”、“+=” “>=”、“<=”、“+”、“*”、“%”、“&&”、“||”、“<<”,“^”等二元操作符的前后应当加空格。
【规则 2-3-6】一元操作符如“!”、“~”、“++”、“–”、“&”(地址运算符)等前后不加空格。
【规则 2-3-7】象“[]”、“.”、“->”这类操作符前后不加空格。
【建议 2-3-1】对于表达式比较长的 for 语句和 if 语句,为了紧凑起见可以适当地去掉一些空格,如 for (i=0; i<10; i++)和 if ((a<=b) && (c<=d))
2.4 对齐
【规则 2-4-1】程序的分界符‘{’和‘}’应独占一行并且位于同一列,同时与引用它们的语句左对齐。
【规则 2-4-2】{ }之内的代码块在‘{’右边数格处左对齐。
void Function(int x) { … // program code } if (condition) { … // program code } else { … // program code } for (initialization; condition; update) { … // program code } While (condition) { … // program code } 如果出现嵌套的{},则使用缩进对齐,如: { … { … } … }
补充说明:尽量不要出现三级以上的嵌套循环。
2.5 长行拆分
单行长度控制在70-80字符内
换行时,操作符尽量在前。
2.6 修饰符的位置
为了不引起歧义,修饰符尽量和变量名靠近。
char *name; int *x, y;
2.7 注释
行注释使用//...., 代码块注释使用/*.....*/ 函数声明注释使用 /** * ... * ... * ... * ... **/
2.8 类的版式
服务器高级架构体系:https://xxetb.xet.tech/s/4DEnTI