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文件分开作为一个单元来编译,还是直接对一个文件里面所有的类进行编译

阅读 3.8k
3 个回答

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文件, 然后再被链接到一起形成可执行文件或者库;

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题