behind-programming
behind-programming copied to clipboard
持续补充一些编程规范
- [x] 注释活动应贯穿编码周期始终:先写注释,再写代码,TODO, FIXME
- [x] 说明
m_已经明确使得this->不再必要 - [x] 重写RAII段,使之采用acquire/release而非new/delete,避免失去一般性
- [x] 说明一些禁止出现的关键词:如
goto、friend - [x] 整数不再支持i前缀
- [x] 进一步明确
*和&要靠近类型 - [x]
*/ - [x] 显式提及boost mutex guard等
- [x] 构造函数,列表,分组,所有成员,重操作,Init,对于不能在初始化后更改的参数不能提供Set
- [x] 打印日志不能打固定字符串,不要使用
perror,不要打印到标准输出端 - [ ] 长生命周期的对象,依然要正确实现析构,并说明析构函数的一些坑
- [ ] main级别的函数依然应该进行对象化,这样能够规避全局变量
- [ ] 介绍什么时候分别使用boost和C++11中同样的函数,兼容性
- [ ] 防御式编程,显式提到NULL检查、下标检查,并且提到对assert和异常类的使用
- [ ] “目的”一节,进行修订
- [ ] 说明为什么使用C++11,以及最有可能使用到的特性
- [ ] 说明第三方库的依赖管理原则
- [x] 强调反对定义一个
common.h,来间接#include很多头文件,这个会降低编译速度,并且带来不可预料冲突 - [ ] 说明头文件包含顺序的意义,以及它和google的保持了一致
- [ ] 强调宏用在元编程上,已经
do while、_VAR_ARGS_等常见的宏技巧 - [ ] 明确反对
return Step1() && Step2() && Step3() - [x] 明确提及
public``protected``private顺序 - [x] 函数体内
//,增加对于空一格的说明 - [x] 反对
throw (errno) - [x] 通过样例明确
m_pfn等 - [ ]
On而不是SetXXXCallback - [ ] 区分
handle和handler - [ ] C++11 lamda function
- [ ] boost thread
- [ ]
if/delete/[] - [x] log level
- [ ] 返回值未必只是判断0
- [ ] init idoim
- [ ] https://en.wikibooks.org/wiki/C%2B%2B_Programming/Idioms
- [ ] https://en.wikibooks.org/wiki/More_C%2B%2B_Idioms
- [ ] index用于多个数组,善用sizeof
- [ ] http://www.tantalon.com/pete/cppopt/design.htm
- [ ] http://neo.dmcs.p.lodz.pl/symos/wyklady/04-TwoPhase.pdf
- [ ] && -> || no
- [ ] memcpy无法保护两者,strncpy可以
- [ ] snprintf sizeof -1
- [ ] 不要在if里面调用函数
- [ ] 轻函数不做重事;异常不出层次
- [ ] char** sizeof(char*)
- [ ] enum class
- [ ] size_t
- [x] struct no m_
- [ ] I for interface
- [x] getter可以不用get开头
- [ ]
void*优化char* - [x] ui前缀
- [ ] ++i
- [ ] 循环的中断位置应留痕
- [x] const
- [ ] 关于取时间的代价
- [x] 抛异常的地方,不打印异常日志
- [ ] 允许的缩写列表
- [ ] 代码处理的对称 ~、Recycle、Release、if、操作、=NULL、调用而不要重复,初始赋值在try外还是在内等
- [ ] RAII Guard补充说明:ownership、init负责方、~负责方、action proxy
- [ ] 缩略词的大小写方式规定
- [ ] 不建议使用
///和\param - [ ] 连接超时
- [ ] 不同的异常不能混合处理
- [ ] LT/ET
- [ ] 网络包相关时: u int32 `#pragma pack push
- [ ] 模板参数强类型: [ ]
- [ ] 避开0,另外0、1、2也不要直接去比较,而应该通过命名常量的方式赋予场景意义
- [ ] 序列号唯一性
- [ ] 压测报告要在过程中产生,一方面是记录,一方面是反馈并修正
- [ ] 进一步强调命名的词性要正确
- [ ] 进一步强调不要混合使用异常和布尔返回值
- [ ] 说明一些常见的缩写,要当作单词处理,不能全大写:Id、Tcp、Ipc、Cpu等
- [ ] 不要使用backtrace等库加重异常
- [ ] 明确反对对memcpy_s的使用
- [ ] 反对atoi,关键的数字应直接使用字符串比较
- [ ] 明确反对数字节的解析方式,而应该使用结构体
- [ ] https://github.com/noffle/art-of-readme
- [ ] 例外必须是有明文说明、取得共识的规则,而不是例外的事实。
- [ ] https://www.zhihu.com/question/35193523/answer/61693305