一些常见任务的C代码可以在项目之间共享,并保留供将来使用。但是我该怎么做呢?在 .c 或 .h ?我注意到C头文件(.h)通常只包含函数声明,而不是定义,这似乎是推荐的做法。
将声明和定义放在mycode.h
中,这样我就可以简单#include "myheader."
并将所有作业留给编译器。
在mycode.h
中添加声明,在mycode.c
中添加定义。可能符合惯例?但我每次都必须编译并链接mycode.c
。
最佳做法是什么?有什么建议?
修改:
每个人都说#2是更好的做法。但是如何告诉编译器定义/实现(.c / .o / .so?)在头文件中的位置?因为我只是#include并使用printf(...);?
答案 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)它取决于你... 是的,动态库大小与静态库相比较少。 所以第二选择是最好的。