2017-07-21 26 views
-1

が継承されている任意の.cpp -file(正しい言葉のthats場合)、ヘッダファイルには、ファイル名に追加.hを持つファイルです。私たちのC++クラスでは(常に(自然)言語を切り替え)非常に曖昧だったが、私は、ヘッダーは機能の宣言のみであり、他のディレクティブは、それらの関数を定義含ま理解してきたことから、右のことですか? 感謝:)C++:includeディレクティブとヘッダーファイルの違いは何ですか?私はincludeディレクティブを理解して何から

+0

***インクルードディレクティブは、継承された(正しい単語があれば).cppファイルです。***これは正しい単語ではありません。また、通常は.cppファイルは一切含んでいません。 – drescherjm

答えて

4

#includeは前プロセッサディレクティブです。プリプロセッサー指令プリプロセッサーの動作。プリプロセッサは、を処理する、すなわち、コンパイルする前にソースコードを変更する。

前プロセッサは、ディレクティブの引数であるファイルの内容を#includeディレクティブを置き換えます。このように含まれるファイルは、通常、ファイルの先頭(先頭)に配置されるため、ヘッダーファイルと呼ばれます。だから、#include <iostream>iostreamというヘッダファイルの内容によって置き換えられます(を除いて、このようiostreamなどの標準ライブラリヘッダはnecessarillyファイルとして存在していません)。ディレクティブでヘッダファイルの

含めると、複数のソースファイルの先頭に同じヘッダーを使用できます。しかし、C++標準では、複数のソースファイルに複数の関数と変数の定義(いくつかの例外があります)が許可されていません。このため、ヘッダーファイルには通常、定義ではなく関数と変数の宣言のみが含まれています。コンパイラは、関数を使用するプログラムを理解するために、関数と変数をコンパイラが知っていなければならないという宣言です。

インクルードディレクティブとヘッダーファイルの違いは何ですか?

includeディレクティブとヘッダーファイルの両方の説明からわかるように、それらは全く異なる概念です。あなたの質問は、「ペンとショートストーリーの違いは何ですか?」と似ています。あなたはペンで短編小説を書くことができますが、彼らは非常に似ていないので、彼らは非常に異なる概念です。同様に、インクルード・ディレクティブでヘッダー・ファイルをインクルードすることはできますが、ほとんど比較できません。

+0

説明をありがとうございます。私の混乱は、ドイツ語のWikipediaの記事 "Header-Datei"が "Include directive"に英語でリダイレクトされているという事実から来ているに違いありません。 @エーマン私は見る。 – Eman

+0

それは混乱を説明するでしょう。ご覧のとおり、Wikipediaのリダイレクトで2つの関係がどのような関係になっているかは、実際には仮定できません。 – user2079303

+0

「そうでない場合を除いて、ヘッダファイルと呼ばれます。 –

4

A「ディレクティブは、」preprocessor macroを指し、これだけ

#include "foo.h" 

を意味し、ヘッダファイルは、使用しての引き込みられるだけで、実際のファイルである「ディレクティブが含まれ、」すべてのヘルプ#include directive

+2

@Eman違いはありませんが、ファイル名には '#include'ディレクティブに固有の意味がありません。ディレクティブは命令です: "このファイルを含める";ヘッダーファイルはインクルードされる「もの」(ファイル)です。 –

+1

@Emanもう一度答えを読んでください: "includeディレクティブ"はコード行です。 "ヘッダファイル"は、インクルードディレクティブによって参照されることを意図したファイルです。それはあなたの質問へのかなり明確な応答です "違いは何ですか" –

0

のファイルに「.h」が含まれていないと、そのファイルに違いがあります(存在する場合)。

回答 - 'includeディレクティブ'との違いはありません。コンパイラはしばしば気にしますが、インクルードを正しく配置すると文句はありません。


おそらく例が役立つかもしれません。しかし、最初の要約:

ザディレクティブ

を含む - は含むディレクティブが

コンパイル単位を作成するために除去され、交換される(元のコードで)マーク - コード

ありません

- 置換テキストを含むファイルを特定します

置換テキストは、任意の種類のテキスト、コードでも、そうでなくてもかまいません。すべての構文ルールは引き続き適用され、コンパイラはインクルード・ディレクティブを見ることはできません。インクルード・ディレクティブ・ファイルの内容だけです。

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ディレクティブがはっきりと見えると思います。このスニペットの最初の行には "#include"が含まれています。

この例では、指定されたファイル名は実行可能なコードではありません。慣習的に、.hh(や.hpp)や.cc(または.cpp) )。 (これらは、あまりにも動作することができますが、あなたの読者にもっと混乱するかもしれません。)

ファイルは、1つのラインを持っている単純なテキストです:

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

^             ^
starts with double quote  and ends with double quote 

トリプルドットが、私は情報の多くを抑制していることを意味します。たとえば、このファイルには約14757文字の1行、すべての数字とスペースが含まれています。要約すると


何を、どこのいくつかの制限を持っている "ディレクティブには、"。コンパイラが間違っていると文句を言う。

コードを前処理した結果を「コンパイル単位」といいます。

"コンパイル単位"には、元のファイル( 'includeディレクティブ'を含む)のすべてのコードが含まれていますが、 'includeディレクティブ'は含まれていません。

'includeディレクティブ'は、ファイルの内容で置き換えられました。この場合、いくつかのデータを記述するテキストファイルです。

'includeディレクティブ'は、ファイル拡張子には何の関心も払わず、 '.hh'または '.cc'も使用しません。これは、コンパイラへの提出のために、さまざまなファイルを「コンパイル単位」に前処理するために使用されます。

関連する問題