c - 在 C 头文件中隐藏实现和辅助函数

标签 c header include modularity

由于我包含的文件只是简单地复制到我包含的文件中,所以我可以调用头文件实现的任何函数。

据我所知,静态声明也无济于事。

如何发布一些头文件并防止用户的主 C 文件调用我的头文件中的某些函数?

(当然不是真的隐藏,因为他只能看源码,而是帮助他不要使用不打算直接调用的函数)

最佳答案

不要真的隐藏它们(顺便说一句,让你的图书馆 free software 通常是值得的。你可以使用 LGPL 许可证....)。但是将这些内部函数放在一个单独的标题中,例如foo-internals.h 是来自公共(public) foo.h#include 并将这些函数注释为仅供内部使用!

此外,定义一些命名约定,例如对公共(public)函数使用一些通用的 foo_ 前缀,对“私有(private)”函数使用 foointernal_。使用 once-only headers需要时。

您可以使用可见性 pragmasfunction attributes (将可见性设置为隐藏),至少在 Linux 或 GCC 上是这样。

API不仅由头文件定义,而且由约定和文档定义。未记录的函数或注释为内部的函数不应期望成为 API 的一部分。

通过研究真实存在的自由软件库的源代码(例如 GTK 、Posix libc,如 MUSL libcGNU libc 等....)获取灵感。

关于c - 在 C 头文件中隐藏实现和辅助函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22285441/

相关文章:

php - javascript中自动递增名称和ID

PHP include_once 添加尾随 1 到页面

c++ - 包含已知已包含的文件

c++ - 为什么大型本地数组会使我的程序崩溃,而全局数组却不会?

连接 2 个字符串并返回一个新指针

php - 如何通过 php header 重定向传递 GET 字符串中收到的变量?

c - 使用条件变量多线程时出现意外行为

audio - 替换 WAV header

dll - 更改dll文件头中的pdb文件路径

php - 获取初始运行脚本的绝对路径