c语言数据封装

最近写了一个linux 下tcp聊天室程序,刚开始时是写在一个文件里的版本,后来整理了思路写在了不同的文件里,于是考虑程序间的调用关系,参数传递,接口之类的问题,发展到最后考虑的是数据完全的封装。

比如在test.c中定义

#include "stu.h"
struct Stu {
int id;
char name[10];
};
struct Stu* stu_init() {
struct Stu* stu = (struct Stu* )malloc(sizeof(struct Stu));
return stu;
}
void stu_dinit (struct Stu* stu) {
if (!stu)
free(stu);
}
stu_setname (const char* name, struct Stu* stu) {
strcpy (stu->name, name);
}
char* stu_getname (struct Stu) {
return stu->name;
}
在test.h中
Struct Stu; 	//以前我会把结构体的定义放在.c文件中,这次,只把声明放在这里,
		//于是其他用户无法知道该结构体的定义,而且无法直接访问该结构体的成员,
		//由此达到封装的目的
struct Stu* stu_init() ;
void stu_dinit (struct Stu* stu) ;
stu_setname (const char* name, struct Stu* stu);
char* stu_getname (struct Stu);

在main.c中
#include “test.h”
void main (void) {
//struct Stu stu; 这条语句将出错,提示 该类型变量大小未知。
struct Stu* stu; //只能以这样方式访问该结构体。
stu = stu_init();//为结构体分配存储空间(mallod) 并返回指针,
stu_setname(“张飞”,  stu);
printf ("%s \n", stu_getname)://对结构体的访问只能通过test.h列出的接口函数完成,从而隐藏了数据。
stu_dinit(stu);//释放内存
}
用了这样的方法封装数据后,对malloc 和free的调用成了必须的步骤,正好对应了c++的构造函数和析构函数,相比于c++,如果c语言每个模块都用这样的方法,那么每个模块中都得写init和dinit这样的函数,c++的构造和析构函数的确方便了不少





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

豆腐白菜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值