を見ると、プリプロセッサディレクティブ#include <iostream>
であると言われています。
#include
--->ディレクティブ
で思うんですけど:
<iostream>
--->プリプロセッサ
しかし、「プリプロセッサ」と「ディレクティブ」とはどういう意味ですか?
を見ると、プリプロセッサディレクティブ#include <iostream>
であると言われています。
#include
--->ディレクティブ
で思うんですけど:
<iostream>
--->プリプロセッサ
しかし、「プリプロセッサ」と「ディレクティブ」とはどういう意味ですか?
#include
はプリプロセッサディレクティブで<iostream>
あり、このディレクティブに加えて提供される引数であり、この場合はファイル名です。
一部のプリプロセッサディレクティブは引数を取りますが、そうでないものもあります。
#define FOO 1
#ifdef _NDEBUG
....
#else
....
#endif
#warning Untested code !
共通の機能は、それらがすべて。で始まること#
です。
Olden Timesでは、プリプロセッサは、ソースコードをコンパイラのフロントエンドに渡す前に前処理し、マクロ置換を実行し、ヘッダーファイルなどを含める別のツールでした。最近では、プリプロセッサは通常、コンパイラの不可欠な部分です。しかし、それは本質的に同じ仕事をします。
「指示」と「与えられた指示」(つまり命令)との関係を考えると役立つ場合があります。「プリプロセッサディレクティブ」は、コンパイルの後の段階が始まる前にコードに加える必要のある変更についてのプリプロセッサへの指示です。
しかし、プリプロセッサとは何ですか?その名前は、コンパイルの「メイン」段階の前にソースコードを処理することを反映しています。テキストのソースコードを処理し、さまざまな方法で変更するだけです。プリプロセッサは、操作するトークンを理解していません。タイプや変数、クラス、関数の概念はありません。すべて、引用符や括弧でグループ化され、コンマや空白で区切られたテキストが処理されます。この追加のプロセスにより、プログラムの一部を選択、結合、さらには生成する際の柔軟性が高まります。
@SWEngineerのコメントに対応する編集:多くの人は、プリプロセッサをC ++プログラムを変更し、その出力を「実際の」C ++コンパイラに提供する別個のプログラムと考えると便利だと感じています(これは以前とほぼ同じです)。プリプロセッサがそれを見ると、 「ああ、これは私が理解していることです。これを処理し、C++コンパイラに盲目的に渡すだけではありません」#include <iostream>
と考えます。そのため、いくつかのディレクトリを検索します(コンパイラが独自のヘッダーをインストールしたような標準的なディレクトリや、を使用して指定された他のディレクトリ)/usr/include
-I
コマンドラインで)「iostream」というファイルを探します。それが見つかると、入力プログラムの「#include」という行を「iostream」というファイルの完全な内容に置き換え、結果を出力に追加します。ただし、「iostream」ファイルから読み取った最初の行に移動し、理解できるディレクティブをさらに探します。
したがって、プリプロセッサは非常に単純です。、、/ / 、、、、を理解できますが、それ以外#include
は理解できません。それは何の手がかりを持っていません"#define
#if
#elif
#endif
#ifdef
$ifndef
#warning
#error
int
"は、テンプレート、クラス、またはその「実際の」C ++のものです。これは、ファイルやコードの一部を切り取って貼り付け、C++コンパイラが最終的に認識して処理するプログラムを準備する自動エディタのようなものです。プリプロセッサは、これらすべての異なるディレクトリでプログラムの一部を見つける方法を知っているため(コンパイルの次の段階ではそれについて何も知る必要はありません)、他のプログラムで機能する可能性のあるコードを削除できるため、依然として非常に便利です。コンピュータシステムですが、使用中のシステムでは有効ではありません。また、プログラムが多くの実際のC ++コードを生成する短く簡潔なマクロステートメントを使用できるようにして、プログラムをより管理しやすくします。
#define
およびなどのプリプロセッサディレクティブ#ifdef
は、通常、ソースプログラムを簡単に変更し、さまざまな実行環境で簡単にコンパイルできるようにするために使用されます。ソースファイル内のディレクティブは、プリプロセッサに特定のアクションを実行するように指示します。たとえば、プリプロセッサはテキスト内のトークンを置き換えたり、他のファイルの内容をソースファイルに挿入したりできます...
#include
はプリプロセッサディレクティブであり、コンパイラのプリプロセッサ部分で使用されることを意味します。これは、コンパイルプロセスの「前」に発生します。#include
含める「何」を指定する必要があります。これは引数によって提供されますiostream
。これは、プリプロセッサにファイルを含めるように指示しますiostream.h
。
詳しくは: