Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我在 vlc 代码库中看到了下面的代码。
/** This structure is opaque. It represents a libvlc instance */ typedef struct libvlc_instance_t libvlc_instance_t;
我在徘徊为什么隐藏结构定义。据我所知,它是一个开源项目,为什么在选择开源整个项目的同时选择隐藏部分代码?
它不是隐藏的,因为他们希望它是秘密的。它是隐藏的,因为它是一个实现细节。
在开源和其他项目中使用不透明结构和其他机制来实现封装和实现隐藏,以确保软件版本之间的 API 兼容性。例如,在有插件架构的地方,主软件的作者希望插件能够在不修改的情况下继续工作,即使他们更改了主软件。因此,他们以允许将来进行此类更改的方式隐藏实现细节。
如果没有这些技术,插件和主机软件之间的集成将很脆弱,并且可能导致版本之间的不兼容。