利用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语言是否可以实现这种方式呢?
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) { // }}相关文章