C ++:include指令和头文件有什么区别?

时间:2017-07-21 16:11:55

标签: c++ inheritance include header-files

根据我的理解,include伪指令是任何.cpp - 继承的文件(如果这是正确的词),而头文件是文件名附加.h的文件。在我们的C ++类中,它是非常模糊的(不断切换(自然)语言)但是从我所理解的标题只是函数的声明而另一个包含指令然后定义那些函数,是吗? 任何帮助表示赞赏:)

3 个答案:

答案 0 :(得分:4)

“指令”是指preprocessor macro,因此“包含指令”仅指

groovy

头文件只是您使用#include directive提取的实际文件。

答案 1 :(得分:4)

#include是预处理器指令。预处理器指令指示预处理器的行为。预处理器进程即在编译之前修改源代码。

预处理器将#include指令替换为作为指令参数的文件的内容。以这种方式包含的文件称为头文件,因为它们通常位于文件的开头(头部)。因此,#include <iostream>将替换为名为iostream的标头文件的内容(除了iostream之类的标准库标题不一定作为文件存在)。

使用指令包含头文件允许在多个源文件的开头使用相同的头。但是,C ++标准不允许跨多个源文件的函数和变量的多个定义(尽管有一些例外)。这就是头文件通常只包含函数和变量的声明而不是定义的原因。这是声明,编译器必须知道函数和变量才能理解使用它们的程序。

  

include指令和头文件有什么区别?

正如您对include指令和头文件的描述所示,它们是完全不同的概念。你的问题类似于:&#34;笔和短篇小说有什么区别?#34;。你可以用笔写一个短篇小说,但它们不是很可比,因为它们是如此不同的概念。类似地,您可以包含带有include指令的头文件,但它们几乎没有可比性。

答案 2 :(得分:0)

  

您包含的文件之间有什么区别(如果有的话)   这样做并且没有&#34; .h&#34;在他们中间。

答案 - &#39; include指令&#39;没有区别。编译器经常关注,但如果正确放置包含,则不会抱怨。

也许一个例子可能有所帮助。但首先要总结一下:

包含指令

- 不是代码

- 标记(在原始代码中)删除include指令并替换它以创建编译单元

- 并标识哪个文件包含替换文本

替换文本可以是任何类型的文本,代码或不。所有语法规则仍然适用,编译器永远不会看到&#39; include指令&#39;,只是include-directive-file的内容。

考虑到这一点,在下面的实际功能代码片段中,请注意,在类方法属性的中间,我有一个&#34; include指令&#34;它指定了一个文件:

int exec_3of3() // EXPERIMENT 3 of 3
  {
     // copied your data from the SO post to a file named 'dumy447.inc'
     // using my editor (emacs) I lightly modified the file:
     //      1) inserted a quote at the beginning
     //      2) removed the only line feed (after the 2500)
     //      3) appended a quote to the end of the file (after 11161)
     // With these  3 changes, the file can be used directly in the code!

     std::stringstream ssIn (

#include "./dumy447.inc"

     );
     assert(ssIn.good());
     // BAM! - a stream filled with your text data

  ...

我认为include指令清晰可见......这段代码中的单行有一个&#34; #include&#34;在开始。

在此示例中,指定的文件名根本不是可执行代码,文件范围不重要,但按惯例,它不应该是.hh(也不是.hpp)也不是.cc(也不是.cpp) 。 (这些也可以起作用,但可能会让读者感到困惑。)

该文件是简单文本,有一行:

" 2500 19325 74348 68955 ...  48428 83799 91649 11161 "

^                                                     ^
starts with double quote     and ends with double quote

三重点意味着我压制了很多信息。例如,此文件包含1行,大约14757个字符,所有数字和空格。

总结:

&#34; include指令&#34;什么地方和哪里都没有什么限制。如果你做错了,你的编译器会抱怨。

预处理代码的结果称为&#34;编译单元&#34;。

&#34;编译单元&#34;拥有原始文件的所有代码(其中包含&#39; include指令&#39;)但不再包含&#39; include指令&#39;。

&#39; include指令&#39;已被文件的内容替换,在本例中是描述某些数据的文本文件。

&#39; include指令&#39;不注意文件范围,也不注意&#39; .hh&#39;或&#39; .cc&#39;。它用于将各个文件预处理到编译单元&#34;,以便提交给编译器。