我正在开展个人项目,我只想公开3 ou 4功能。 其中一个问题是我的.c文件正在获得越来越多的静态函数。目前它已经有21个静态功能。
组织包含大量静态函数的.c文件的最佳方法是什么? 是否可以(好的做法)将这些静态函数分离到自己的.c文件中,然后将它们包含在主.c文件中? 我更喜欢一种方法,我可以有单独的文件,这样从一个函数移动到另一个函数更简单(没有滚动只是在文件之间切换)。
由于
修改
为了更好地理解这个问题,这里是直接链接到.c文件,我遇到了管理静态函数的困难:
https://github.com/AntonioCS/mustache/blob/master/src/mustache.c
答案 0 :(得分:3)
包含可以将大型编译单元拆分为多个文件。但是,我强烈反对命名包含的文件.c
,因为该扩展指示了工具和其他开发人员的单独编译单元。请考虑将它们命名为.inl
。
答案 1 :(得分:1)
有一大组函数,有些static
,有些没有,问题可以达到100多个函数。要管理该命名空间,请考虑这两种方法
将static
个函数拆分为两组:真正的static
个只存在于需要它的.c文件中。他们使用static
关键字。
与其他全局函数一样存在于各种.c文件中的第二组函数。他们不使用static
关键字。这些函数也应以mustache_
开头。这些和您的其他全局函数之间的区别在于声明它们的包含文件对您的代码是私有的而不是公共的。所以代码有mustache.h
和mustache_private.h
。
这在技术上污染了全局命名空间,但是因为你的"胡子的用户"通常,对象需要避免与以mustache_
开头的任何对象发生冲突,这些"私有"会出现意外冲突。功能
第二种方法是使用胡子例程的库管理来控制其余代码可见的名称。此解决方案是特定于平台/编译器的。
答案 2 :(得分:0)
组织一个C程序以减少全局调用,意味着您希望模块化程序逻辑并使每个模块都可以为其自己的数据而设置。函数,称为封装,它是一个OOP原则。由于您已熟悉C,只需阅读有关OO和C ++的内容,并更新代码库,除非存在技术限制。
答案 3 :(得分:0)
如果您的项目(在Linux上)编译为共享库(不是可执行文件或静态库),您可以使用可见性pragmas和{{3 }} 即可。您想要使用hidden
function attributes声明所有内部函数。因此,如果您的libaa.so
是根据a1.c
和a2.c
编译而使用某些“隐藏”功能h
,则h
函数会在某些私有<中声明/ em>标题例如在void h(int) __attribute__ ((visibility ("hidden")));
内可以看到a1.c
(也可以在其中定义)&amp; a2.c
但不在任何链接libaa.so
...