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

时间:2012-03-30 14:16:11

标签: c++ header include

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

例如,我的文件a.ha.c都有class A。我在class Aclass Bb.h)中使用b.c。做一个包含有什么区别:

#include "a.h"
b.h vs b.c中的

6 个答案:

答案 0 :(得分:5)

通常,类定义通常位于.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中包含#inc),只是因为你碰巧在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

答案 1 :(得分:2)

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

答案 2 :(得分:2)

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

foo.h中:

#include "dependency.h"

bar.h:

#include "foo.h"

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

答案 3 :(得分:0)

#include "a.h"扩展为a.h

的内容

如果#include "a.h"放置在b.h,则a.h将在编译期间复制到b.h

如果#include "a.h"放置在b.c,则a.h将在编译期间复制到b.c

答案 4 :(得分:0)

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

但.c文件单独编译然后链接到getter以生成可执行文件

答案 5 :(得分:0)

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

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

相关问题