HWRules1
关于头文件
* 设计问题
* 头文件变大
* 被依赖模块增加,提高编译时间
* 编译优化措施,头文件目录单一,减少搜索插入时间
* 拒绝万能头文件
禁止包含用不到的头文件(同上)
头文件只适合放置声明,不适合放置实现
* 放置实现的头文件如果被多个C文件包含,会出现重复声明和定义
禁止在头文件中定义变量
头文件应该向稳定的方向包含
* 头文件的包含关系代表一种依赖,头文件的变化会引起重新编译
每个C文件应有一个同名的H文件,用于声明需要对外公开的接口
* 不想被别人看到的,隐藏在C文件里,最好声明成静态
只能通过包含头文件的方式使用其他模块提供的接口,禁止在C中使用extern方式使用外部函数接口和变量
* 如果A模块对函数进行了修改,B模块会出现声明和实现不一致的情况
禁止头文件循环依赖\
总是编写内部的ifndef保护符
* ifndef A_H_
* define A_H_
头文件应当自包含
禁止在extern C中包含头文件
关于函数
子函数的好处
降低复杂度,易于思考
便于协同开发
代码复用,减少代码量
封装变化
良好的可移植性圈复杂度小于7
* 可执行的路径条数
函数短小,小于50行
嵌套层数小于5
职责单一
抽象层次单一
参数不超过三个
避免重复(代码复用)
避免重入问题
* 使用公共资源,导致物品丢失问题就是重入问题
* 时间:在函数执行完成之前,又一次被调用
* 公共资源:只用函数对公共资源有访问的时候,才会有问题
* 资源锁
不要返回局部变量地址
语句编程规范
效率<可维护性
常量/全局变量/静态变量/堆/栈/代码区
常见问题
堆
* 申请内存判断是否成功 * 申请自愿注意释放 * 申请粒度不应当过细
栈
* 宝贵资源,效率较高,但有限 * 不要返回或者传递栈变量
强制类型转换
* 有无符号互转 * 截断
整数溢出
字节对齐* 设计数据结构时设计为字节对齐无关
字节序
字符串* 慎用strcpy等函数
*\是指针运算符,可以表示一个变量是指针类型,也可以表示一个指针变量的所指向的存储单元,可以获取某个地址存储的值
& 是取地址符号,取得某一个变量的地