《高质量C++编程指南》第2章~程序的版式--【优秀的编程思想】

举报
王博Kings 发表于 2020/12/30 02:02:07 2020/12/30
【摘要】 目录 程序的版式就和书法一样 2.1 空行 2.2 代码行  2.3 代码行内的空格 2.4 对齐  2.5 长行拆分  2.6 修饰符的位置 2.7 注释   2.8 类的版式  程序的版式就和书法一样 2.1 空行 (1)每个类声明后、每个函数定义结束后都要加空行 (2)一个函数体内,逻辑密切之间不加空行,其他地方加空行  //(...

目录

程序的版式就和书法一样

2.1 空行

2.2 代码行

 2.3 代码行内的空格

2.4 对齐

 2.5 长行拆分

 2.6 修饰符的位置

2.7 注释 

 2.8 类的版式


 程序的版式就和书法一样

2.1 空行

(1)每个类声明后、每个函数定义结束后都要加空行

(2)一个函数体内,逻辑密切之间不加空行,其他地方加空行 


  
  1. //(1)
  2. //blank
  3. void Function1()
  4. {
  5. ...
  6. }
  7. //blank
  8. void Function2()
  9. {
  10. ...
  11. }
  12. //blank
  13. void Function3()
  14. {
  15. ...
  16. }

 


  
  1. //(2)
  2. //blank
  3. while (condition)
  4. {
  5. statement1;
  6. //blank
  7. if (condition)
  8. {
  9. statement2;
  10. }
  11. else
  12. {
  13. statement3;
  14. }
  15. //blank
  16. statement4;
  17. }

2.2 代码行

(1)一行代码只做一件事,只定义一个变量,或只写一条语句,方便阅读和注释

(2)if \  for  \  while  \  do 各占一行,不论多少语句都要加{}

(3)尽可能在 定义变量的同时初始化该变量


  
  1. int width; //宽度
  2. int height //高度
  3. int depth; //深度
  4. //别写成 int width, height, depth;
  5. x = a + b;
  6. y = c + d;
  7. z = e + f;
  8. //别写成x=a+b;y=c+d;z=e+f;
  9. if (width < height)
  10. {
  11. dosomething();
  12. }
  13. //别写成 if(width<height) dosomething();
  14. for (i initialization; condition; update)
  15. {
  16. dosomething();
  17. }//千万不要省略{}
  18. //blank
  19. other();
  20. //就近原则,定义变量的同时初始化该变量
  21. int width; //宽度
  22. int height //高度
  23. int depth; //深度

 2.3 代码行内的空格

(1)关键字后面要留空格。比如:const、virtual、inline、case;if ,for , while 后面有个空格后再加()

(2)函数名后不要留空格,紧跟()

(3)左括号( 向后紧跟;   右括号),逗号,分号;向前紧跟,紧跟不留空格

(4)逗号,之后要有空格,比如function(x, y, z)如果有分号;也是后面留空格x; y; z;

(5)赋值操作,比较操作,算术操作,逻辑操作,位域操作;=;+=;>=;<=;+;*;%;&&;||;<<;^前后都加空格

(6)一元运算符!;~;++--;&(地址)前后都不能加空格

(7)[];. ;->这类的前后也不加空格

(8)如果for,if语句,由于表达式特别长,则可以省略其中一部分空格


  
  1. void func1(int x, int y, int z);//逗号后加空格
  2. if (year >= 2000)//前后加空格
  3. if ((a >= b) && (c <= d)) //
  4. for (i=0; i<10; i++)//分号后加空格
  5. for (i = 0; i < 10; i++) //空格太多了,不好!
  6. x = a < b ? a : b;
  7. int *x = &y; //注意*
  8. array[5] = 0;
  9. a.function();
  10. b->function();

2.4 对齐

(1)程序分界符{   }  应当独立占一行并位于同一列,同时与引用他们的语句左边对齐

(2){  } 之内的代码块要缩进数格,然后左对齐 


  
  1. void Function(int x)
  2. {
  3. code ...
  4. }
  5. //-------------------------------------------------------
  6. if (condition)
  7. {
  8. code ...
  9. }
  10. else
  11. {
  12. code ...
  13. }
  14. //-------------------------------------------------------
  15. for (size_t i = 0; i < length; i++)
  16. {
  17. code ...
  18. }
  19. //-------------------------------------------------------
  20. while (true)
  21. {
  22. code ...
  23. }
  24. //-------------------------------------------------------
  25. //循环嵌套
  26. {
  27. ...
  28. {
  29. ...
  30. }
  31. }

 2.5 长行拆分

(1)代码行最长  别超过七八十个字符, 不利于看和打印

(2) 要在低优先级操作符那里拆分,操作符放前面突出,适当缩进,排版整齐


  
  1. //-------------------------------------------------------
  2. if ((very_longer_variable1 >= very_longer_variable2)
  3. && (very_longer_variable3 >= very_longer_variable4)
  4. && (very_longer_variable5 >= very_longer_variable6))
  5. {
  6. dosomething();
  7. }
  8. //-------------------------------------------------------
  9. virtual CMatrix CMultiplyMatrix(CMatrix leftMatrix,
  10. CMatrix rightMatrix);
  11. //-------------------------------------------------------
  12. for (very_longer_initialization;
  13. very_longer_conditionl;
  14. very_longer_update)
  15. {
  16. dosomething();
  17. }

 2.6 修饰符的位置

修饰符*和&应该靠近数据类型还是靠近变量名?

(1)应当将修饰符*和&紧靠变量名

char *name;

int  *x,  y;  //此时y就不会被误解为指针了!!!!

2.7 注释 

(1)注释是提示,不要太多

(2)代码很清楚时不要画蛇添足

(3)边写代码边注释,修改代码时  同时修改相应注释,以保证一致性,不再有用的注释要删除

(4)注释应当准确易懂,不要有歧义

(5)避免注释时使用 缩写

(6)注释的位置与代码相邻,别差太远,放在上边或右边,别放下面!!!

(7)代码 比较长,多重嵌套,应当在一些段落结尾处注释


  
  1. /*
  2. * 函数介绍
  3. * 输入参数
  4. * 输出参数
  5. * 返回值
  6. */
  7. void Function(float a, float b, float c)
  8. {
  9. ...
  10. }
  11. //--------------------------------------------
  12. if (true)
  13. {
  14. ...
  15. while (true)
  16. {
  17. ...
  18. } //这里写注释 end of while
  19. ...
  20. } //这里写注释 end of if

 2.8 类的版式

类提供关键字public   protected  private

分别用于声明公有,受保护,私有 

(1)将private类型写在前面,将public写在后面,主张“以数据为中心”,重点关注类的内部结构

(2)将public类型卸载前面, 将private类型卸载后面,主张“以行为为中心”


  
  1. //以行为为中心版式
  2. class MyClass
  3. {
  4. public:
  5. MyClass();
  6. ~MyClass();
  7. private:
  8. int i, j;
  9. float x, y;
  10. ....
  11. };
  12. MyClass::MyClass()
  13. {
  14. }
  15. MyClass::~MyClass()
  16. {
  17. }

 

文章来源: kings.blog.csdn.net,作者:人工智能博士,版权归原作者所有,如需转载,请联系作者。

原文链接:kings.blog.csdn.net/article/details/89461087

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

举报
请填写举报理由
0/200