首页 > c/c++ 文件包含宏的问题(#include)

c/c++ 文件包含宏的问题(#include)

c++在新建一个类时,会新建一个a.h文件和a.cpp文件,a.cpp的第一句是#include “a.h”。
那么我想问:
1.我在另外一个类,类b中使用类a的时候,只需包含它的头文件#include “a.h”,那这时是不是只把a.h中的类声明代码包含在了类b文件中,还是说把类a的声明代码和实现代码都包含了?
2.不管是哪种包含,预处理程序会把相应代码插入到对应的文件中,在编译时,编译器是把每一个cpp文件分开作为一个单元来编译,还是直接对一个文件里面所有的类进行编译


1:只把a.h中的类声明代码包含在了类b文件中
程序在编译完成后,将编译的所以文件链接成一个可以执行文件,相当于把所有代码汇总
所以只需要包含声明就行了
2:每一个cpp单独编译
如果不同cpp有联系,比如a.cpp 调用 b.cpp中的函数,b.cpp改变以后,只会编译b.cpp和b.cpp产生联系的cpp


  1. 包含的是 a.h 里的内容,如果 a.h 里面有实现,那就有实现。

  2. 编译的具体动作以 linux 为例,可以用cc -E a.cpp来看预处理之后的结果,每个 .cpp 文件会被视为一个编译单元并生编译生成 .o 文件。


1:包含头文件.h时, 仅仅将该头文件中的代码包含进来,不会把与之对应的.cpp包含进来。
所以一般在.h里面只提供变量或者函数的声明, 而不提供实现代码。 否则当一个头文件被多个.cpp包含时, 链接时就会报告变量或者函数重复定义;
2:每个cpp会单独编译成对应的.o文件, 然后再被链接到一起形成可执行文件或者库;

【热门文章】
【热门文章】