我不太明白应该如何在C的源文件和头文件中分离.我经常看到许多项目有两组具有相同名称的文件(没有表示源文件和头文件的扩展名).
到目前为止,由于缺乏理解,当我编写库时,我已将所有类和类方法代码放入一个文件中,并且选择文件扩展名时犹豫不决.
什么应该在标题中以及源文件中应该包含哪些内容?我该如何实现这种分离?
Tho*_*mas 63
没有技术差异.如果您愿意,编译器很乐意让您包含.c文件或.h直接编译文件.
然而,存在巨大的文化差异:
声明(原型)进入.h文件.该.h文件是相应文件中实现的任何接口.c.
定义放在.c文件中.它们实现了.h文件中指定的接口.
不同之处在于.h文件可以(通常会)#include进入多个编译单元(.c文件).如果在文件中定义函数.h,它将以多个.o文件结束,并且链接器将抱怨多重定义的符号.这就是为什么定义不应该放在.h文件中.(内联函数是例外.)
如果在.c文件中定义了一个函数,并且您想要从其他.c文件中使用它,则需要在每个其他.c文件中提供该函数的声明.这就是你把声明放在a中的原因.h,以及#include每个声明中的声明.您还可以在每个.c文件中重复声明,但这会导致大量代码重复和无法更改的混乱.
如果一个函数在定义.c文件,但你不希望从其他使用它.c的文件,没有必要宣布它的头.它本质上是该.c文件的实现细节.在这种情况下,也要使用该函数static,因此它不会与其他文件中具有相同名称的函数冲突.
dir*_*tly 14
什么应该在标题中以及源文件中应该包含哪些内容?
通常,标头包含以下一项或多项:
struct,union等)另一方面,源文件有:
我该如何实现这种分离?
One Definition Rule是你的朋友.
请记住,如果您正在编写库,那么这就是您的客户可以看到的内容.因此,请提供帮助,并提供可供他们使用您的图书馆的所有信息.源文件通常以二进制形式编译和提供.
顺便说一句,C没有类的概念.