学编程以来已经三年了,然后最近看了一本林锐博士的《高质量C/C++编程指南》(百度文库链接),感觉很多编程风格确实是值得借鉴学习的,在这里做一个小总结。
一、编程风格
- 函数或者类的定义、声明结束后,函数体内部逻辑密切的语句与其他地方都使用空行隔开。
- 一行代码只完成一件事,定义变量记得初始化。比如定义一个变量,只写一条语句等等。
- if、for、while、do独占一行,执行语句不论是几句都加上 { } 。
- 关键字后留一个空格,函数名后不留空格以作区别 。
- “ ( ” 向后紧跟,“ ) , ; ” 向前紧跟,, ; 之后留空格,二元操作符前后加空格,一元不加
- “ * ”操作符紧跟指针变量名,与其构成整体。“ & ”同理。
- 程序分界符 “ { ”和 “ } ”应独占一行,位于同列,同时与引用它的语句左对齐。
- 注释一般写在代码的上方或者右方。
二、默认规则
- 对于widows系统函数命名一般采用大小写混排,Linux系统是小写字母加下划线。
- 不要出现与标识符一样命名的局部变量或者全局变量,避免在命名里出现数字编号,尽量让命名有意义。
- 静态变量前面加s_(static),全局变量前面加g_(global)。
- 需要对外开放的声明放到头文件里,不需要的直接放在文件开头就好。
- 若一些常量之间有关联时,在定义时应包含这些关联,有利于代码可读性。
- 函数的形参一般不要过多,最好不超过5个,结构体做形参一般传址调用,当不需要形参时最好写上void。
- 若形参是只做输出作用的指针,定义时在类型前加const。提高程序安全性和健壮性。
- 对于函数,功能尽量单一,规模控制在50行之内。
- 当返回值可直接返回时,就直接返回,不要创建中间变量。例如:
方式一明显优于方式二,虽不明显但一定程度上减少了开销,提高了可读性。return int(x + y); //方式一 int temp = x + y; //方式二 return remp;
- 多层循环里,一般最长的循环放到最内层,减少CPU跨切循环层的次数。
- 循环和条件相互嵌套时,循环次数 n 较大时,把条件判断放到外面,趋于流水线循环,提高效率;循环次数 n 较小时,把条件判断放到里面,此时程序的简洁可弥补破坏流水线模式的损失。
三、小技巧/冷知识
- 断言 assert 是一个仅在 Debug 版本起作用的宏。
- if 语句里不可将Bool变量直接与TRUE、FALSE或者1、0进行比较。可以采用下面的方法:
Bool flag; if (flag) {} if (!flag) {}
- 指针变量的 0 值是空,记作:NULL。比较时可按照下面的方法:
int *p; if (p == NULL) {} if (p != NULL) {}
- 遇到下面的情况,可按代码片所示进行优化:
//原始版本 if(req) return x; return y; //初步优化 if(req) { return x; } else { return y; } //进一步优化 return (req ? x : y);
- 表示常量时,const修饰的常变量优于#define表示的宏,因为前者表示有明确的数据类型。