C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

プリプロセッサはC/C ++でどのように機能しますか?


ここでは、プリプロセッサがCまたはC++でどのように機能しているかを確認します。プリプロセッサとは何かを見てみましょう。

プリプロセッサは、実際のコンパイルが開始される前に情報を前処理するようにコンパイラに指示するディレクティブです。

すべてのプリプロセッサディレクティブは#で始まり、行のプリプロセッサディレクティブの前に空白文字のみを表示できます。プリプロセッサディレクティブはC++ステートメントではないため、セミコロン(;)で終了しません。

すでに#includeを見てきました すべての例でディレクティブ。このマクロは、ヘッダーファイルをソースファイルにインクルードするために使用されます。

C ++でサポートされているプリプロセッサディレクティブには、#include、#define、#if、#else、#lineなどがあります。重要なディレクティブを見てみましょう-

#defineプリプロセッサ

#defineプリプロセッサディレクティブはシンボリック定数を作成します。シンボリック定数はマクロと呼ばれ、ディレクティブの一般的な形式は-

です。
#define macro-name replacement-text

#include <iostream>
using namespace std;
#define PI 3.14159
int main () {
   cout << "Value of PI :" << PI << endl;
   return 0;
}

出力

Value of PI :3.14159

条件付きコンパイル

プログラムのソースコードの選択部分をコンパイルするために使用できるディレクティブがいくつかあります。このプロセスは条件付きコンパイルと呼ばれます。

条件付きプリプロセッサ構造は、「if」選択構造によく似ています。次のプリプロセッサコードを検討してください-

#ifndef NULL
#define NULL 0
#endif

デバッグ目的でプログラムをコンパイルできます。次のように、単一のマクロを使用してデバッグをオンまたはオフにすることもできます-

#ifdef DEBUG
cerr <<"Variable x = " << x << endl;
#endif

これにより、ディレクティブ#ifdef DEBUGの前にシンボリック定数DEBUGが定義されている場合、cerrステートメントがプログラムでコンパイルされます。次のように、#if 0ステートメントを使用して、プログラムの一部をコメントアウトできます-

#if 0
code prevented from compiling
#endif

#include <iostream>
using namespace std;
#define DEBUG
#define MIN(a,b) (((a)<(b)) ? a : b)
int main () {
   int i, j;
   i = 100;
   j = 30;
   #ifdef DEBUG
   cerr <<"Trace: Inside main function" << endl;
   #endif
   #if 0
      /* This is commented part */
      cout << MKSTR(HELLO C++) << endl;
   #endif
   cout <<"The minimum is " << MIN(i, j) << endl;
   #ifdef DEBUG
      cerr <<"Trace: Coming out of main function" << endl;
   #endif
   return 0;
}

出力

Trace: Inside main function
The minimum is 30
Trace: Coming out of main function

  1. LinuxでのC++の最高のIDEは何ですか?

    大きなプロジェクトは、単なるテキストエディタでは管理が困難です。このような場合にIDEを使用すると、生産性が向上し、フラストレーションが軽減される可能性があります。 IDEにはさまざまな種類があり、ニーズに合ったものを選択する必要があります。 Linux上のC++に最適なIDEは1つではありません。ツールは賢く選ぶ必要があります。 Linux用の人気のあるIMOの最高のIDEのリストは次のとおりです。 C /C++開発用のNetbeans- Netbeansは、C /C++および他の多くのプログラミング言語向けの無料のオープンソースで人気のあるクロスプラットフォームIDEです。コミュニテ

  2. C ++の#defineプリプロセッサとは何ですか?

    #defineは、識別子またはパラメータ化された識別子とトークン文字列の関連付けであるマクロを作成します。マクロが定義された後、コンパイラーは、ソースファイル内の識別子の出現ごとにトークン文字列を置き換えることができます。 #define identifier token-string これがプリプロセッサの使用方法です。 #defineディレクティブを使用すると、コンパイラは、ソースファイル内で出現する識別子ごとにtoken-stringを置き換えます。識別子は、トークンを形成する場合にのみ置き換えられます。つまり、識別子がコメント、文字列、またはより長い識別子の一部として表示されている場合