高质量C++C编程指南,v1.0 22代码行 【规则2-2-1】一行代码只做一件事情,如只定义一个变量,或只写一条语句。这样 的代码容易阅读,并且方便于写注释 ●【规则2-2-2】 if for、 while、do等语句自占一行,执行语句不得紧跟其后。不论 执行语句有多少都要加{}。这样可以防止书写失误 示例22(a)为风格良好的代码行,示例22(b)为风格不良的代码行。 int width;//宽度 int width, height, depth;//宽度高度深度 int height;∥/高度 int depth;//深度 X y=c+ d if (width height) if width< height) dosomethingo dosomethingo for(initialization; condition; update)for(initialization: condition; update) dosomething(:: other o /空行 other o 示例2-2(a)风格良好的代码行 示例2-2(b)风格不良的代码行 ◆【建议22-1】尽可能在定义变量的同时初始化该变量(就近原则) 如果变量的引用处和其定义处相隔比较远,变量的初始化很容易被忘记。如果引用 了未被初始化的变量,可能会导致程序错误。本建议可以减少隐患。例如 int width=10;//定义并初绐化 width int height=10;//定义并初绐化 height int depth=10;//定义并初绐化 depth 2001 Page 16 of 101
高质量 C++/C 编程指南,v 1.0 2001 Page 16 of 101 2.2 代码行 z 【规则 2-2-1】一行代码只做一件事情,如只定义一个变量,或只写一条语句。这样 的代码容易阅读,并且方便于写注释。 z 【规则 2-2-2】if、for、while、do 等语句自占一行,执行语句不得紧跟其后。不论 执行语句有多少都要加{}。这样可以防止书写失误。 示例 2-2(a)为风格良好的代码行,示例 2-2(b)为风格不良的代码行。 int width; // 宽度 int height; // 高度 int depth; // 深度 int width, height, depth; // 宽度高度深度 x = a + b; y = c + d; z = e + f; X = a + b; y = c + d; z = e + f; if (width < height) { dosomething(); } if (width < height) dosomething(); for (initialization; condition; update) { dosomething(); } // 空行 other(); for (initialization; condition; update) dosomething(); other(); 示例 2-2(a) 风格良好的代码行 示例 2-2(b) 风格不良的代码行 【建议 2-2-1】尽可能在定义变量的同时初始化该变量(就近原则) 如果变量的引用处和其定义处相隔比较远,变量的初始化很容易被忘记。如果引用 了未被初始化的变量,可能会导致程序错误。本建议可以减少隐患。例如 int width = 10; // 定义并初绐化 width int height = 10; // 定义并初绐化 height int depth = 10; // 定义并初绐化 depth
高质量C++C编程指南,v1.0 23代码行内的空格 【规则2-3-1】关键字之后要留空格。象 const、 virtual inline、case等关键字之 后至少要留一个空格,否则无法辨析关键字。象i、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语句和i语句,为了紧凑起见可以适当地去 掉一些空格,如for(i=0;i10;i+)和i(a<=b)&&(c<=d) void Funcl(int x, int y, int z) //良好的风格 void Funcl (int x, int y, int z) //不良的风格 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? 8: b /良好的风格 x=a<b?a: b //不好的风格 /良好的风格 int **x=& //不良的风格 array[5]=0 不要写成aray[5]=0 //不要写成a. Function o b->Function //不要写成b-> Function0 示例2-3代码行内的空格 17 of
高质量 C++/C 编程指南,v 1.0 2001 Page 17 of 101 2.3 代码行内的空格 z 【规则 2-3-1】关键字之后要留空格。象 const、virtual、inline、case 等关键字之 后至少要留一个空格,否则无法辨析关键字。象 if、for、while 等关键字之后应留 一个空格再跟左括号‘(’,以突出关键字。 z 【规则 2-3-2】函数名之后不要留空格,紧跟左括号‘(’,以与关键字区别。 z 【规则 2-3-3】‘(’向后紧跟,‘)’、‘,’、‘;’向前紧跟,紧跟处不留空格。 z 【规则 2-3-4】‘,’之后要留空格,如 Function(x, y, z)。如果‘;’不是一行的结束 符号,其后要留空格,如 for (initialization; condition; update)。 z 【规则 2-3-5】赋值操作符、比较操作符、算术操作符、逻辑操作符、位域操作符, 如“=”、“+=” “>=”、“<=”、“+”、“*”、“%”、“&&”、“||”、“<<”,“^”等二 元操作符的前后应当加空格。 z 【规则 2-3-6】一元操作符如“!”、“~”、“++”、“--”、“&”(地址运算符)等前后不 加空格。 z 【规则 2-3-7】象“[]”、“.”、“->”这类操作符前后不加空格。 【建议 2-3-1】对于表达式比较长的 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(); 示例 2-3 代码行内的空格
高质量C++C编程指南,v1.0 24对齐 ·【规则2-4-1】程序的分界符“{和“}应独占一行并且位于同一列,同时与引用 它们的语句左对齐。 ·【规则2-4-2】{}之内的代码块在“{右边数格处左对齐 示例24(a)为风格良好的对齐,示例2-4(b)为风格不良的对齐。 void Function(int x) void Function(int x)i // program code …// program code if (condition) if (condition)( …// program code else else …// program code …// program code for (initialization; condition; update) for (initialization; condition; update)( // program code 7/ program code While(condition) while (condition( …/ program code 如果出现嵌套的{},则使用缩进对齐,如: 示例2-4(a)风格良好的对齐 示例2-4(b)风格不良的对齐
高质量 C++/C 编程指南,v 1.0 2001 Page 18 of 101 2.4 对齐 z 【规则 2-4-1】程序的分界符‘{’和‘}’应独占一行并且位于同一列,同时与引用 它们的语句左对齐。 z 【规则 2-4-2】{ }之内的代码块在‘{’右边数格处左对齐。 示例 2-4(a)为风格良好的对齐,示例 2-4(b)为风格不良的对齐。 void Function(int x) { … // program code } void Function(int x){ … // program code } if (condition) { … // program code } else { … // program code } if (condition){ … // program code } else { … // program code } for (initialization; condition; update) { … // program code } for (initialization; condition; update){ … // program code } While (condition) { … // program code } while (condition){ … // program code } 如果出现嵌套的{},则使用缩进对齐,如: { … { … } … } 示例 2-4(a) 风格良好的对齐 示例 2-4(b) 风格不良的对齐
高质量C++C编程指南,v1.0 25长行拆分 【规则25-1】代码行最大长度宜控制在70至80个字符以内。代码行不要过长,否 则眼睛看不过来,也不便于打印。 【规则25-2】长表达式要在低优先级操作符处拆分成新行,操作符放在新行之首(以 便突出操作符)。拆分出的新行要进行适当的缩进,使排版整齐,语句可读 if very longer variablel >=very longer variable12) & (very longer variables<= very longer variable14) & (very longer variable < very longer variable16)) dosomethingo virtual CMatrix CMultiplyMatrix(CMatrix leftMatrix CMatrix rightMatrix for (very longer_ initialization very longer condition dosomething(: 示例2-5长行的拆分 26修饰符的位置 修饰符*和&应该靠近数据类型还是该靠近变量名,是个有争议的活题。 若将修饰符*靠近数据类型,例如:int*x;从语义上讲此写法比较直观,即x 是int类型的指针。 上述写法的弊端是容易引起误解,例如:int*x,y;此处y容易被误解为指针变 量。虽然将x和y分行定义可以避免误解,但并不是人人都愿意这样做。 【规则26-1】应当将修饰符*和&紧靠变量名 例如: har *name int*x,y;/此处y不会被误解为指针 2001 Page 19 of 101
高质量 C++/C 编程指南,v 1.0 2001 Page 19 of 101 2.5 长行拆分 z 【规则 2-5-1】代码行最大长度宜控制在 70 至 80 个字符以内。代码行不要过长,否 则眼睛看不过来,也不便于打印。 z 【规则 2-5-2】长表达式要在低优先级操作符处拆分成新行,操作符放在新行之首(以 便突出操作符)。拆分出的新行要进行适当的缩进,使排版整齐,语句可读。 if ((very_longer_variable1 >= very_longer_variable12) && (very_longer_variable3 <= very_longer_variable14) && (very_longer_variable5 <= very_longer_variable16)) { dosomething(); } virtual CMatrix CMultiplyMatrix (CMatrix leftMatrix, CMatrix rightMatrix); for (very_longer_initialization; very_longer_condition; very_longer_update) { dosomething(); } 示例 2-5 长行的拆分 2.6 修饰符的位置 修饰符 * 和 & 应该靠近数据类型还是该靠近变量名,是个有争议的活题。 若将修饰符 * 靠近数据类型,例如:int* x; 从语义上讲此写法比较直观,即 x 是 int 类型的指针。 上述写法的弊端是容易引起误解,例如:int* x, y; 此处 y 容易被误解为指针变 量。虽然将 x 和 y 分行定义可以避免误解,但并不是人人都愿意这样做。 z 【规则 2-6-1】应当将修饰符 * 和 & 紧靠变量名 例如: char *name; int *x, y; // 此处 y 不会被误解为指针
高质量C++C编程指南,v1.0 27注释 C语言的注释符为“./”。C++语言中,程序块的注释常采用“/…*”,行注释 一般采用“∥.”。注释通常用于: (1)版本、版权声明; (2)函数接口说明; (3)重要的代码行或段落提示。 虽然注释有助于理解代码,但注意不可过多地使用注释。参见示例2-6。 【规则27-1】注释是对代码的“提示”,而不是文档。程序中的注释不可喧宾夺主, 注释太多了会让人眼花缭乱。注释的花样要少。 【规则27-2】如果代码本来就是清楚的,则不必加注释。否则多此一举,令人厌烦 例如 i+;∥/i加1,多余的注释 【规则27-3】边写代码边注释,修改代码同时修改相应的注释,以保证注释与代码 的一致性。不再有用的注释要删除。 【规则27-4】注释应当准确、易懂,防止注释有二义性。错误的注释不但无益反而 有簪。 【规则2-7-5】尽量避免在注释中使用缩写,特别是不常用缩写。 【规则27-6】注释的位置应与被描述的代码相邻,可以放在代码的上方或右方,不 可放在下方。 【规则27-8】当代码比较长,特别是有多重嵌套时,应当在一些段落的结束处加注 释,便于阅读。 if(…) 函数介绍: 输入参数: 输出参数: while(.) *返回值: void Function(float x, float y, float z) }∥ end of while }∥ end of if 示例2-6程序的注释 Page 20 of 101
高质量 C++/C 编程指南,v 1.0 2001 Page 20 of 101 2.7 注释 C 语言的注释符为“/*…*/”。C++语言中,程序块的注释常采用“/*…*/”,行注释 一般采用“//…”。注释通常用于: (1)版本、版权声明; (2)函数接口说明; (3)重要的代码行或段落提示。 虽然注释有助于理解代码,但注意不可过多地使用注释。参见示例 2-6。 z 【规则 2-7-1】注释是对代码的“提示”,而不是文档。程序中的注释不可喧宾夺主, 注释太多了会让人眼花缭乱。注释的花样要少。 z 【规则 2-7-2】如果代码本来就是清楚的,则不必加注释。否则多此一举,令人厌烦。 例如 i++; // i 加 1,多余的注释 z 【规则 2-7-3】边写代码边注释,修改代码同时修改相应的注释,以保证注释与代码 的一致性。不再有用的注释要删除。 z 【规则 2-7-4】注释应当准确、易懂,防止注释有二义性。错误的注释不但无益反而 有害。 z 【规则 2-7-5】尽量避免在注释中使用缩写,特别是不常用缩写。 z 【规则 2-7-6】注释的位置应与被描述的代码相邻,可以放在代码的上方或右方,不 可放在下方。 z 【规则 2-7-8】当代码比较长,特别是有多重嵌套时,应当在一些段落的结束处加注 释,便于阅读。 示例 2-6 程序的注释 /* * 函数介绍: * 输入参数: * 输出参数: * 返回值 : */ void Function(float x, float y, float z) { … } if (…) { … while (…) { … } // end of while … } // end of if