在#include
文件和.h
文件中执行.c
有什么区别?
例如,我的文件a.h
和a.c
都有class A
。我在class A
(class B
,b.h
)中使用b.c
。做一个包含有什么区别:
#include "a.h"
b.h
vs b.c
中的?
答案 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
文件就是实际的食谱。