1

我正在做一个个人项目,我只想公开 3 ou 4 功能。问题之一是我的 .c 文件越来越多的静态函数。目前它已经有 21 个静态函数。

组织包含大量静态函数的 .c 文件的最佳方法是什么?可以将这些静态函数分离到它们自己的 .c 文件中,然后将它们包含在主 .c 文件中吗?我更喜欢一种可以拥有单独文件的方法,以便从一个功能移动到另一个功能更简单(无需滚动只是在文件之间切换)。

谢谢

编辑

为了更好地理解问题,这里直接链接到我在管理静态函数时遇到困难的 .c 文件:

https://github.com/AntonioCS/mustache/blob/master/src/mustache.c

4

4 回答 4

3

Including can work to split apart a large compilation unit into multiple files. However, I strongly discourage naming the included files .c, because that extension indicates a separate compilation unit both to tools and other developers. Consider naming them something like .inl instead.

于 2014-09-18T17:07:35.340 回答
1

拥有大量功能,有的static,有的没有,问题可以达到 100 多个功能。要管理该命名空间,请考虑以下两种方法

  1. static函数分成 2 组:真正static只存在于需要它的一个 .c 文件中的函数。他们使用static关键字。

    与其他全局函数一样,存在于各种 .c 文件中的第二组函数。他们不使用static关键字。这些函数也应该以mustache_. 这些和您的其他全局函数之间的区别在于,声明它们的包含文件对您的代码是私有的,而不是公共的。所以代码有mustache.hmustache_private.h

    这在技术上会污染全局命名空间,但是由于您的“mustache”对象的用户通常需要避免与任何以开头的对象mustache_发生冲突,因此与这些“私有”函数不会发生令人惊讶的冲突。

  2. 第二种方法是使用您的 mustache 例程的库管理来控制其余代码可见的名称。此解决方案是特定于平台/编译器的。

于 2014-09-18T19:04:01.000 回答
0

如果您的项目(在 Linux 上)被编译成共享库(不是可执行文件或静态库),您可以使用visibility pragmafunction attributes。您想用hidden 可见性声明所有内部函数。因此,如果您libaa.so是从某个“隐藏”函数编译而来a1.ca2.c使用某个“隐藏”函数编译的hh那么在某些私有标头中声明的该函数例如void h(int) __attribute__ ((visibility ("hidden")));在内部可见a1.c(也可以在其中定义)&a2.c但在任何外部程序链接中不可见libaa.so...

于 2014-09-18T19:07:31.170 回答
0

组织 C 程序以减少全局调用,意味着您希望模块化程序逻辑并让每个模块负责其自己的数据和功能,这就是所谓的封装,它是一种 OOP 原则。由于您已经熟悉 C ,只需阅读有关 C++ 的 OO 的内容,并更新您的代码库,除非有技术限制。

于 2014-09-18T18:33:25.717 回答