利用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类型的结构体MSerialSerial_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相关的编程学习基地
长按指纹 > 识别图中二维码 > 添加关注
觉得不错,点个“在看”然后转发出去
评论

