我看了《C语言程序设计艺术》这本书,上面又如何创建库的内容,其创建格式如下:
比如有个工具包A.H,首先创建接口
/* A.H */
#ifndef __A_H
#define __A_H
f1();
f2();
f3();
......
#endif
这里的f1,f2,f3是指库中包含哪些外导的函数(所谓外导就是客户可以使用的函数),定义__A_H的目的是防止该头文件被反复包含。然后封装函数包:
/* A.C */
#include "A.h"
f1() {
...
}
f2() {
...
}
f3() {
...
}
这样就完成了一个库,用户在使用时只要包含头文件"A.h"就行了,如果A.c中有个sub()函数,这个函数不为客户所使用的话,请按照如下声明该函数:
static <ReturnType> <function name>(Argumets) {
...
}
这里的static关键词被放在了函数返回类型前面,目的就是让该函数私有,不对其他模块所享用,所以这里的static就可以理解为private的意思。
这就使标准库的写法,不过书上好像没有提到如何编译(我认为必须将A.c生成为A.lib后包含A.h才有效,否则会造成编译错误)
我本人写库的方法(仅供参考):
首先写封装:
/* A.c */
f1() {
...
}
f2() {
....
}
f3() {
...
}
...
然后写接口:
/* A.h */
#ifndef __A_H
#define __A_H
// 将封装包含入头文件
#include "A.c"
//这里写封装中用到的宏定义
#define ...
#define ...
//这里可以写数据结构
struct {
....
};
typedef enum {....};
类似的自定义类型都写在这里。
//然后下面就是导入函数
extern f1();
extern f2();
extern f3();
//最后结束宏
#endif