behind-programming icon indicating copy to clipboard operation
behind-programming copied to clipboard

持续补充一些编程规范

Open utensil opened this issue 9 years ago • 0 comments

  • [x] 注释活动应贯穿编码周期始终:先写注释,再写代码,TODO, FIXME
  • [x] 说明m_已经明确使得this->不再必要
  • [x] 重写RAII段,使之采用acquire/release而非new/delete,避免失去一般性
  • [x] 说明一些禁止出现的关键词:如gotofriend
  • [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
  • [ ] 区分handlehandler
  • [ ] 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

utensil avatar Aug 11 '16 09:08 utensil