包含在.h文件和.c文件中的区别
Difference between include in .h file and .c file
在.h
文件和在.c
文件中执行#include
有什么区别?
例如,我有一个文件a.h
和a.c
,它们有class A
。我在class B
中使用class A
(b.h
、b.c
)。做一个include有什么区别:
#include "a.h"
在b.h
与b.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
文件是实际的食谱。
- 在 .h 文件中的类中声明静态变量和在.cpp文件中声明"global"变量有什么区别
- 共享库 (.so) 没有扩展名的 Linux 可执行文件之间的区别?
- C++:包含指令和头文件有什么区别?
- 为什么 .cpp 文件和 .h 文件之间有区别?
- 包含 .h 文件和 c/cpp 文件有什么区别?
- ios::app 和 ios::noreplace 模式在文件处理中有什么区别?
- 在 c++ 中将结构的每个成员写入文件和将结构对象直接写入文件之间有什么区别吗?
- Open() 用于创建文件和打开现有文件.有人能分辨出其中的区别
- pimpl和定义类别的.cpp文件之间的区别
- 使用运算符读取文件和使用读取功能>>文件有什么区别?
- openssl rc4 命令行加密和 cpp 文件实现 rc4 之间的区别
- 在Android NDK库.a文件中,gnustl_shared和gnustl_static有什么区别
- 将静态库链接行添加到我的QT项目文件没有区别
- 我的编译行和我的生成文件之间的区别可能导致错误
- CBP文件和CPP文件之间有什么区别
- 将头文件(.h)放在另一个文件(.h或.cpp)的开头和结尾之间的区别
- .o、.a和.so文件之间有什么区别
- 挂载文件系统和挂载磁盘驱动器有什么区别
- 以二进制和文本打开文件之间的区别
- 链接到动态文件和作为输入对象有什么区别?