使C lib的一部分“私有”

我正在开发一个共享库,由于代码很大,我决定将它拆分为许多头文件和源文件,就像任何正常程序一样:)。

问题是大多数这些标题都是供内部使用的,即我不希望它们可以从我的库外部访问。 因此,我正在考虑将它们全部移动到一个大的源文件中,并且仅提供可见的标题。

这样做是个好主意吗? 我应该担心能见度吗?

谢谢

不要合并标题,只需将它们与源文件放在一起,不要将它们“发布”为开发包的一部分。 作为一个例子,Linux内核在源代码树中有许多标题,但只有某些标题暴露给应用程序(在include结构中)。

你应该从“清洁”的角度来接近它; 不要发送包含您无意打电话的function的标题。 不要记录您没有提供标题的function。

如果有人真的想要在你的库中调用一个函数,他们可以,但你应该试着说明这是一个不受支持的用例,如果一切都出错就是他们的问题。

是的,您应该担心符号可见性。 在Windows上,设置为使用DLLEXPORT。 在Linux上,定义DLLEXPORT以设置默认符号可见性,但使用-fvisibility = hidden编译所有内容。 关于它的Ulrich Drepper文章很有用。

对于包含文件,您可以将它们分成目录和/或您可以使用包装系统来复制公共文件。