链表就是一个结构体 指针指向自身结构体类型
双向链表插入的时候 先改变自身 再改变两边
双向链表删除的时候 先改变两边 再改变自己
逆序一个单向链表
回调函数
指向函数的指针

4链表的遍历回调用法
// 链表的统一遍历的方法
void for_each(struct node *head,void(*fp)(struct node*node))

5数据类型的加强

6 数据类型加强的练习

7预处理步骤和宏函数的陷阱
续行符

预处理器的处理过程:


8函数的do-while(0)用法


在if else中就不行了,会报错

因为else前面是两行表达式了
宏定义上面加{}

这时候可以用了,但是必须把分号去掉

定义宏函数

这样结尾可以写;(分号)
9中午回顾
10宏函数的操作符

11宏函数debug接口的简单封装

12程序中记录日志的标准

13动态库的封装


.dll是windows的动态库
linux下是.so


.dll是最终代码
.lib是告诉编译器dll文件在哪
windows下动态库是一对

linux下是.so
(因为lib文件比较小,先加载进来.. windows的设计


(放在函数前面了)
生成

放到一起

14 调用第三方动态库
.lib和.dll都是二进制文件,看不到源码
连接器,

把.lib文件加进去
15内存检测工具memwatch

(windows不用写D linux要加D

属性 然后添加宏

里面重写了malloc


放到HOME里面这个文件里面

linux下有
