所以目前在我的编程中,我现在拥有相当多的函数,我已创建并存储在单独的C文件中,我在项目之间经常使用这些文件。
我的问题是将其实施到其他项目中的最简单,最有效的方法是什么?目前我只为每个新项目创建一个头文件,其中包含我想要使用的所有自定义函数的函数原型。
然后我让项目中的每个C文件都包含这个“master”标题。在这个头文件中,我还包括每个C文件使用的头文件,因此每个C文件都有一个头文件;我们只需称它为master.h
。
我觉得我这样做完全错了。我应该为每个C文件制作头文件并将它们包含在主头文件中吗?或者我应该只为每个C文件创建头文件并根据需要包含它们?如果我这样做,一切仍然会被链接在一起吗?
在项目中使用头文件的最佳方法是什么?
答案 0 :(得分:5)
没有包含其他头文件的头文件。让.c
文件执行此操作 - 使编译更快。
使用前向声明。使重新编译更快,因为它不需要打开其他文件,如果有任何简单的更改,make
命令将花费很多时间来编译大量的东西。
如果逻辑上合并在一起,则组头文件和相应的.c
文件中的组一起运行。对于静态库,链接器会选择适当的位。对于动态库,如果当前不在内存中,则它们在运行时加载(因此可以由其他二进制文件使用)。
没有master.h
。只需使库包含相关的函数(例如数学函数,输入/输出函数等)。各种项目可以选择'n'选择他们需要的东西。
答案 1 :(得分:0)
我建议不要使用master.h
文件,因为整个项目最终过于紧密。每次更改master.h
时,都需要重新编译所有源文件,这会显着降低构建过程的速度。相反,尝试使用相关功能创建.h
个文件。 C库是一个很好的灵感:stdlib.h
,math.h
等。
要使用这些标头,您应该将它们包含在每个.c
中,就像使用标准C标头一样:
#include <math.h>
#include <stdio.h>
至于链接,这是一个完全不同的主题。如果大多数功能都是内联的,则无需担心链接。否则,您应该在.c
文件中定义它们,这些文件的名称与您的标题类似(例如,utils.c
等utils.h
等。
答案 2 :(得分:0)
为所有.c
文件创建一个头文件。将相似的函数分组到.c
文件中。别忘了在每个头文件中添加标题保护。
例如,考虑一个头文件one.h
,它应该包含以下标题保护。
#ifndef ONE_H
#define ONE_H
//give your function prototypes here.
#endif //ONE_H
标题后卫将有助于避免双重包含。