利用C语言结构体封装函数
点击下方“程序员编程基地”,一起进步!
重磅干货,第一时间送达
来源:程序员编程基地
作者:名燮
C++语言类中可以封装函数,体现了模块操做的整体性,封装后的函数可以完成自己独特的功能,每个函数提供给你一个接口,使用者只需要通过这个接口传入合法的数值便可以得到想要的结果。
函数封装具有保护性
下面代码便是C++语言对串口函数的封装,这样操作便于调用。
class MarlinSerial //: public Stream
{
public:
MarlinSerial();
void begin(long);
void end();
int peek(void);
int read(void);
void flush(void);
}
调用方法:
MarlinSerial MSerial; //实例化一个对象
MSerial.begin(9600);//设置串口的波特率为9600
这样便实现了串口的初始化。对串口操作函数进行了模块化封装,代码结构清晰。那么C语言是否可以实现这种方式呢?
typedef struct _Parent
{
int a;
int b;
void (*print)(struct _Parent *This);
}Parent;
C语言结构体不能直接封装函数,但可以通过封装函数指针的方式来实现,下面便是我实现的具体方式,可以很方便的移植到任何编译器上测试。
serial.c文件
/* serial.h文件 */
//定义封装函数的结构体,并声明外部引用
//对串口操作函数封装。
typedef struct
{
void begin(long);
void end();
int (*peek)();
uint8_t (*read)(void);
void (*flash)();
int (*availiable)();
void (*checkRx)();
}MarlinSerial;
extern MarlinSerial MSerial;
serial.c文件
MarlinSerial MSerial; //定义MarlinSerial类型的结构体MSerial
Serial_Init()
{
MSerial.read = &Serial_Read;
}
uint8_t Serial_Read(void)
{
printf("hello word!"); //在这里仅作测试所用,未列出真正的串口读取函数
}
/* main.c文件 */
int main(void)
{
Serial_Init();
MSerial.read(); //调用串口读取函数,目前功能为打印字符串
while(1)
{
//
}
}
程序员编程基地 为大家提供与Python相关的编程学习基地
长按指纹 > 识别图中二维码 > 添加关注
觉得不错,点个“在看”然后转发出去
评论