包含在.h文件和.c文件中的区别

Difference between include in .h file and .c file

本文关键字:文件 区别 包含      更新时间:2023-10-16

.h文件和在.c文件中执行#include有什么区别?

例如,我有一个文件a.ha.c,它们有class A。我在class B中使用class Ab.hb.c)。做一个include有什么区别:

#include "a.h"

b.hb.c中?

通常,类定义通常在.h文件中,实现在.c(pp)文件中。

在b.c文件中而不是在b.h文件中执行#include "a.h"的一个优点是,每当a.h发生更改时,不仅b.c,而且包括b.h的任何其他文件都必须重新编译。

此外,你有点不必要向任何使用B.h的人公开B的实现细节。这个想法是B.h不应该包含对使用类B的人不感兴趣的额外信息(不是因为这是秘密,而是因为人们不在乎,你也不想用它来打扰他们)。

没有必要强迫包括b.h在内的任何人也间接地包含十几个其他.h文件(因为它们被#包含在b.h中),只是因为你碰巧在b.c中使用了这些东西。避免混乱。

所以如果可能的话,最好在b.c中使用#include "a.h"

但这并不总是可能的。如果你只是在b.c中使用A,而b.h中没有对A的引用,那也没关系。此外,如果b.h只包含指向A的指针(即作为成员、函数参数或返回值),但没有"依赖类型"的引用,你也可以把它放在b.h:中

class A;

并且仍然在b.c中保留#include "a.h"。但是,如果对a.h有更多的引用或依赖,包括b.h在内的任何人都离不开,那么#include "a.h"应该进入b.h

.h.c文件中包含头文件没有区别
所包含文件的内容只是复制粘贴到包含它的文件中。

如果将include指令放入头文件中,则包含该头文件的其他文件也将获得包含的头。

foo.h:

#include "dependency.h"

bar.h:

#include "foo.h"

在这种情况下,bar.h同时具有foo.h和dependency.h。

#include "a.h"扩展到a.h的内容。

如果#include "a.h"被放置在b.h中,那么在编译期间a.h将被复制到b.h中。

如果#include "a.h"被放置在b.c中,那么在编译期间a.h将被复制到b.c中。

.h文件在编译之前放在.c或.h文件的顶部

但是.c文件单独编译,然后链接到getter以使可执行文件

您可以包含.c文件,但按照惯例,您不能包含。

.h文件用于声明,即.c文件是定义,而这个.h文件将执行此操作。这就像.h文件是烹饪书的内容,而.c文件是实际的食谱。