接口设计模式:
为独立的网络请求模块设计的接口:
select接口(不如epoll好)
epoll 解决了select问题,将一个多个监听描述符的行为再抽象为一个文件描述符的监听,包括指针一起封装起来。
浏览器的:从网络获取数据功能运行独立的网络进程中。
一般性方法和技巧
1.尽量避免返回void
2.明确定义返回值的含义
3.正确使用const修饰词
4.使用最合适的参数类型
size_t <————> int
c中任何对象能达到的最大长度。没有负数。
size_t 补充
size_t 是一些C/C++标准在stddef.h中定义的,size_t 类型表示C中任何对象所能达到的最大长度,它是无符号整数。
它是为了方便系统之间的移植而定义的,不同的系统上,定义size_t 可能不一样。size_t在32位系统上定义为 unsigned int,也就是32位无符号整型。在64位系统上定义为 unsigned long ,也就是64位无符号整形。size_t 的目的是提供一种可移植的方法来声明与系统中可寻址的内存区域一致的长度。
size_t 在数组下标和内存管理函数之类的地方广泛使用。例如,size_t 用做sizeof 操作符的返回值类型,同时也是很多函数的参数类型,包括malloc 和strlen。
在声明诸如字符数或者数组索引这样的长度变量时用size_t 是好的做法。它经常用于循环计数器、数组索引,有时候还用在指针算术运算上。size_t 的声明是实现相关的。
#ifndef __SIZE_T #define __SIZE_T typedef unsigned int size_t; #endif
打印size_t 类型的值时要小心。这是无符号值,如果选错格式说明符,可能会得到不可靠的结果。推荐的格式说明符是%zu。不过,某些情况下不能用这个说明符, 作为替代,可以考虑%u 或%lu。
模式一:
标准IO 抽象数据类型
比如 file
下面的模式与模式一相反
模式二:
抽象算法
1.围绕抽象算法设计接口
2.算法不依赖于具体的数据类型
3.算法不依赖于具体的数据存储方式
比如一种排序算法,不需要针对于一种类型,编写一种排序算法。
void qsort(void *base, size_t nel, size_t width, int (*compar)(const void *,const void *));