最近用libusb做usb驱动,写代码的时候,发现了一个有趣的代码。
struct libusb _ devic dev
并定义为struct libusb _ devic * dev不会报告任何错误。为什么?
【资料图】
这里有一个新问题。在此定义之后,在使用此结构时,您仍需要首先定义以下结构:
结构库usb_devic
几个变量;
那么这种不完整的类型有什么意义呢?后来发现主要用于封装。当我们不希望其他人访问和修改结构的内容时,我们可以将结构的定义封装到一个库中。然后别人调用库的时候只能用不完整的类型作为接口,这样就无法访问结构的成员,更不用说修改结构的内容了。例如下面的代码
libusb _ device * * * list);
这是libusb库中的一个函数,它的参数libusb _ device * * list是封装在库中的一个结构。当我们要调用这个函数时,需要先定义一个不完整的变量structlib USB _ device * * device _ list;然后调用函数libusb _ get _ device _ list
但是,我们不能通过device _ list-member访问该结构的成员,整个结构对用户来说是一个黑盒。
推荐阅读
关于我们 广告服务 手机版 投诉文章:39 60 2 914 2@qq.com
Copyright (C) 1999-2020 www.baiduer.com.cn 爱好者日报网 版权所有 联系网站:39 60 2 914 2@qq.com