1. 头文件
a) 头文件结构:
i. 版权、版本、作者、时间等声明
ii. 预处理快
iii. 函数和类结构声明
b) 引用头文件:
i. ifndef …. define endif避免头文件使用重复
ii. #include<>引用标准库 #include””引用非标准库头文件
iii. 头文件只放声明,不放定义,函数声明与定义分开比较好
iv. 不提倡全局变量,头文件尽量不出现extern int xx等
2. 定义文件
a) 定义文件结构:
i. 定义文件版权等信息
ii. 对头文件引用
iii. 程序实现体
3. 如果头文件比较多,可以将头文件统一于include目录,定义文件于source目录
4. 版式
a) 函数声明及定义后空行
b) 函数体内逻辑相关语句不空行,其余空行
c) 一个代码一做一件事情,定义一个变量,方便注释
d) If while for do 等独自一行,执行语句不接后,无论多少句,都家{}
e) 尽量在定义变量时初始化变量
f) 关键字,如const virtual inline if while for 等后空一格,突出关键字
g) 函数名后不留空格,紧跟括号与关键字区别
h) ‘(‘ 、‘,’ 、‘ ;’向前紧跟,’,’后留空格,’;’后如果仍有,后留空格
i) =、+=、+等二元符前后空格
j) !、~、++、--、&等一元符前后不空格
k) []、->、.前后不空格
l) 较长for 及if 为了紧凑可适当去除个别空格
m) {}上下对齐
n) 代码行不适合太长,分行,操作符放在新行前面
o) *、&靠近变量,虽然语义上不直观,但不会引起误解
p) 注释:
i. 使用于:版本版权声明、函数接口说明、重要代码行或者段落提示
ii. 代码注释一致性
iii. 注释适度、恰当性
iv. 位置放在右侧或者上方
v. 代码较长,在段落结束处注释
q) 类版式,public可以放在private前面,注重行为
r) 标示符简短、明了、无仅靠大小写区分的变量
s) 变量名字,名词或者形容词+名词
t) 全局函数动词或者动词+名词 类函数仅有动词
u) 避免直接数字编号型变量
v) 常量全大写,中间下划线,静态前加s_,全局变量g_,类数据成员m_
5. 表达式及基本语句
a) 运算符比较多,用括号
b) 不同语言True、False不一定对应1、-1
c) 整型变量与0比较不与布尔类型比较
d) 指针变量与NULL比较
e) if内比较的两者可以将待比较者放在后面,防止被意外赋值
f) 多重循环,长循环放在最里面,减少CPU跨切循环次数
g) 循环内有判断,且循环次数很大,可以将判断置外,舍弃简洁,但效率较高
h) 区间用半开半闭
i) switch语句加default
j) const 有数据类型且编译器会检查,定义常量尽量使用const(c++中)
k) 类的const数据成员只能在类初始化中实现
l) 在类中定义全类不变得整数范围内常数可以用枚举类型
6. 函数设计
a) C中参数及返回值传递:值传递及指针传递,c++新增引用传递
b) 函数参数书写完整
c) 如果参数是指针,为防止在函数体内被修改,加const
d) 以值传递,宜修改为const &引用传递,减去临时对象的构造和析构过程
e) 不要省略返回值类型
f) 函数入口处用assert断言检查合法性
g) 引用在创建时必须初始化,指针任何时候都可以初始化
h) 不能有空引用,指针可以NULL
i) 引用初始化后不能改变引用关系,指针可以
j) 引用其实就是原数据本身,既不是其指针,也不是其拷贝
《高质量C++/C编程指南》读书笔记,未完待续。