文章目录
  1. 1. 关于头文件
  2. 2. 关于函数
  3. 3. 语句编程规范

关于头文件

头文件应当职责单一

* 设计问题
* 头文件变大
* 被依赖模块增加,提高编译时间
* 编译优化措施,头文件目录单一,减少搜索插入时间
* 拒绝万能头文件

禁止包含用不到的头文件(同上)

头文件只适合放置声明,不适合放置实现

* 放置实现的头文件如果被多个C文件包含,会出现重复声明和定义

禁止在头文件中定义变量

头文件应该向稳定的方向包含

* 头文件的包含关系代表一种依赖,头文件的变化会引起重新编译

每个C文件应有一个同名的H文件,用于声明需要对外公开的接口

* 不想被别人看到的,隐藏在C文件里,最好声明成静态

只能通过包含头文件的方式使用其他模块提供的接口,禁止在C中使用extern方式使用外部函数接口和变量

* 如果A模块对函数进行了修改,B模块会出现声明和实现不一致的情况

禁止头文件循环依赖\

总是编写内部的ifndef保护符

* ifndef A_H_
* define A_H_

头文件应当自包含

禁止在extern C中包含头文件


关于函数

子函数的好处

降低复杂度,易于思考
便于协同开发
代码复用,减少代码量
封装变化
良好的可移植性

圈复杂度小于7

* 可执行的路径条数

函数短小,小于50行

嵌套层数小于5

职责单一

抽象层次单一

参数不超过三个

避免重复(代码复用)

避免重入问题

* 使用公共资源,导致物品丢失问题就是重入问题
*  时间:在函数执行完成之前,又一次被调用
*  公共资源:只用函数对公共资源有访问的时候,才会有问题
*  资源锁

不要返回局部变量地址

语句编程规范

效率<可维护性

常量/全局变量/静态变量/堆/栈/代码区

常见问题

* 申请内存判断是否成功
* 申请自愿注意释放
* 申请粒度不应当过细 

* 宝贵资源,效率较高,但有限
* 不要返回或者传递栈变量

强制类型转换

* 有无符号互转
* 截断

整数溢出
字节对齐

* 设计数据结构时设计为字节对齐无关

字节序
字符串

*  慎用strcpy等函数

*\是指针运算符,可以表示一个变量是指针类型,也可以表示一个指针变量的所指向的存储单元,可以获取某个地址存储的值
& 是取地址符号,取得某一个变量的地

文章目录
  1. 1. 关于头文件
  2. 2. 关于函数
  3. 3. 语句编程规范