C头文件使用和代码重用

时间:2014-01-20 10:32:51

标签: c header-files code-reuse

一些常见任务的C代码可以在项目之间共享,并保留供将来使用。但是我该怎么做呢?在 .c .h ?我注意到C头文件(.h)通常只包含函数声明,而不是定义,这似乎是推荐的做法。

  1. 声明定义放在mycode.h中,这样我就可以简单#include "myheader."并将所有作业留给编译器。

  2. mycode.h中添加声明,在mycode.c中添加定义。可能符合惯例?但我每次都必须编译并链接mycode.c

  3. 最佳做法是什么?有什么建议?

    修改

    每个人都说#2是更好的做法。但是如何告诉编译器定义/实现(.c / .o / .so?)在头文件中的位置?因为我只是#include并使用printf(...);?

7 个答案:

答案 0 :(得分:2)

创建一个库(.so或.dll - 你的毒药)然后链接到它

然后,头文件将告诉编译器可用的内容

答案 1 :(得分:1)

选项2是最佳做法。选项1为什么不好?如果标头中存在定义,则这些定义具有全局范围。它剥离了软件的模块化。限制变量的范围是很好的做法,因为软件单元耦合较少,因此软件更易于维护。

如果使用make系统,则只需编译已更改的.c文件。

答案 2 :(得分:1)

这实际上取决于项目之间共享的文件数量。

  • 如果您有一个互连的文件集合,通常最好创建一个动态库或静态库,并静态或动态地链接您的应用程序。

  • 一般情况下 - 坚持#2

答案 3 :(得分:0)

最佳做法是第二种选择,因为它不仅简单,而且还有增强和维护

答案 4 :(得分:0)

虽然不经常使用,但我看到的项目包含了很多代码.h。如果您确定代码只会在一个项目中使用,我认为将代码放在标题中并不存在重大缺陷,尽管这很不寻常。

我建议将它放在.c中,以便能够将其编译为单独的模块或共享库。这将简化其他开发人员的工作,并允许更高的可重用性。

答案 5 :(得分:0)

头文件是外部世界的窗口,这是代码所做的内容(界面)。 它是如何做的(实施的细节)是其他模块和项目真正无关的事情。

假设您拥有一家杂货店,您的客户会要求您提供十几个苹果。您: - 检查显示屏中是否有苹果。 - 如果没有,请到后面的房间去买一些。 - 如果你没有苹果,请告诉客户,并下订单恢复库存。

然而,你的客户只想要他的十几个苹果;并不关心他的订单细节。


您可能会看到声明和定义位于同一.h文件中的情况。使用c ++模板时,就我而言,这是强制性的。在其余的情况下,它假设额外的构建时间,因为尽管自上次构建以来没有改变,但这些定义将被编译。

答案 6 :(得分:0)

使用第二个选项...或者创建库,无论它是动态的(.so)还是静态的(.a)它取决于你... 是的,动态库大小与静态库相比较少。 所以第二选择是最好的。