我如何理解cpp头文件

时间:2013-05-02 14:52:41

标签: c++ compilation

  • 为什么main.cpp的头文件只需要包含.h头文件只包含声明而不是实现?

  • 我可以在包含声明和实现的cpp文件中编写一个类,然后将该cpp文件作为headfile包含在main.cpp中吗?

  • 如何包含不在此项目中的头文件?

2 个答案:

答案 0 :(得分:1)

从技术上讲,头文件(或您决定#include的任何其他文件)可以包含任何整体构成完整C ++程序的内容。

当编译器(技术上,称为“C预处理器”的编译器包的一部分)在源代码中看到#include "somefile.h"时,会发生什么?它接收该文件,并且基本上将其“粘贴”到你正在编译的主文件。因此,您可以通过打开头文件“伪装”为预处理器,标记所有内容然后将其粘贴到主文件中。

关于头文件的要点主要是为了避免将相同的C ++拷贝和粘贴到几个源文件中。因此,例如,类的声明可以放入头文件myclass.h,实际实现到myclass.cpp文件,然后使用myclass的程序的另一部分只需要包括标题。

不属于项目的标题文件通常用尖括号括起来,#include <header.h>将包含来自其他项目的“header.h”。

答案 1 :(得分:1)

标题非常简单。他们所做的只是粘贴.h文件中的代码副本来代替#include。

C / C ++需要知道对象的大小或参数的类型和数量,但它不需要知道实现。自由函数的默认链接始终是extern。因此,通过撰写int myFunc();,您实际上正在撰写extern int myFunc()。只要该函数在不同的编译单元(已编译的cpp文件)中实现,即可正常工作。

是的,你可以#include cpp文件,但是如果你真的编译了你的&#39; header.cpp&#39;和&#39; main.cpp&#39;您将在链接时遇到多重定义问题。只需将.cpp文件保留在make文件或项目之外。许多库使用.hpp作为C ++标题的扩展,它们的整个实现都是内联的。