這是為了隱藏structuer 的內部結構用的方法(應該不是甚麼好動機),通常用在廠商只願意提供object file (或library archive)讓RD link。又不願意release出 要用作library 參數用的stucture內部構造。
arg.h:上面的例子, library中包含兩個module : liba.c, libb.c,一個作create working space用,一個依照working space的內容來操作。共同需要的就是workingspace : struct arg 這個structure。
struct arg{
char data;
....
};
liba.c:
#include <arg.h>
int lib_get_arg(struct arg **pp)
{
*p=malloc(.....);
...
}
int lib_clean_arg(struct arg *p)
{
free(p);
...
}
libb.c:
#include %lt;arg.h%gt;
int operation(struct arg *p, int oprtation)
{
*p=.....
... = *p...
}
但是這個structure屬於library module內部所需,不希望外界的code會access(Read/Write)到structure內部的資料。所以外部的code : application 主體(main.c) :
extern int lib_get_arg(struct arg **p);這樣compile不會過,因為struct arg 沒有宣告,但是又不知道struct arg的內容到底是甚麼,所以就:
extern int lib_clean_arg(struct arg *p);
extern int operation(struct arg *p,int operation);
struct arg;告訴compile 是一個structure,內容不知道,這樣就可以了。
因為C的structure 參數一律傳遞pointer,所以對structure內部結構了不了解不影響compile的動作。
在模組話程式設計裏,這樣的module設計是不好的,叫做??? coupled 。
沒有留言:
張貼留言