工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial programming >> C言語

C プリプロセッサとマクロ

C プリプロセッサとマクロ

このチュートリアルでは、C プリプロセッサを紹介し、#include、#define、および条件付きコンパイルの使用方法を例を使用して学習します。

<図>

C プリプロセッサは、プログラムをコンパイルする前に変換するマクロ プリプロセッサ (マクロを定義できるようにする) です。これらの変換は、ヘッダー ファイル、マクロ展開などを含めることができます。

すべての前処理ディレクティブは # で始まります シンボル。たとえば、

#define PI 3.14

C プリプロセッサの一般的な用途には次のようなものがあります:


ヘッダー ファイルを含める:#include

#include プリプロセッサは、ヘッダー ファイルを C プログラムにインクルードするために使用されます。たとえば、

#include <stdio.h>

ここで、stdio.h ヘッダファイルです。 #include プリプロセッサ ディレクティブは、上記の行を stdio.h の内容に置き換えます ヘッダー ファイル。

これが、#include <stdio.h> を使用する必要がある理由です。 scanf() のような関数を使用する前に と printf() .

関数宣言を含む独自のヘッダー ファイルを作成し、このプリプロセッサ ディレクティブを使用してプログラムに含めることもできます。

#include "my_header.h"

ヘッダー ファイルの使用について詳しくは、このページをご覧ください。


#define を使用したマクロ

マクロは、名前が付けられたコードの断片です。 #define を使用して、C でマクロを定義できます。 プリプロセッサ ディレクティブ。

以下に例を示します。

#define c 299792458  // speed of light

ここで c を使うと 私たちのプログラムでは、299792458 に置き換えられます。 .


例 1:#define プリプロセッサ

#include <stdio.h>
#define PI 3.1415

int main()
{
    float radius, area;
    printf("Enter the radius: ");
    scanf("%f", &radius);

    // Notice, the use of PI
    area = PI*radius*radius;

    printf("Area=%.2f",area);
    return 0;
}

マクロのような機能

関数呼び出しと同様に機能するマクロを定義することもできます。これは、関数のようなマクロとして知られています。たとえば、

#define circleArea(r) (3.1415*(r)*(r))

プログラムが circleArea(argument) に遭遇するたびに 、 (3.1415*(argument)*(argument)) に置き換えられます .

引数として 5 を渡すと、次のように展開されます:

circleArea(5) expands to (3.1415*5*5)

例 2:#define プリプロセッサの使用

#include <stdio.h>
#define PI 3.1415
#define circleArea(r) (PI*r*r)

int main() {
    float radius, area;

    printf("Enter the radius: ");
    scanf("%f", &radius);
    area = circleArea(radius);
    printf("Area = %.2f", area);

    return 0;
}

マクロと #define プリプロセッサの詳細については、このページをご覧ください。


条件付きコンパイル

C プログラミングでは、コードのブロックを含めるかどうかをプリプロセッサに指示できます。そのために、条件付きディレクティブを使用できます。

if に似ています 1 つの大きな違いがあります。

if ステートメントは実行時にテストされ、コードのブロックを実行する必要があるかどうかを確認しますが、条件は実行前にプログラムにコードのブロックを含める (またはスキップする) ために使用されます。


条件付きの使用


条件付きの使い方

条件付きを使用するには、#ifdef#if#defined#else#elif ディレクティブが使用されます。


#ifdef ディレクティブ

#ifdef MACRO     
   // conditional codes
#endif

ここで、MACRO の場合にのみ、条件コードがプログラムに含まれます。 が定義されています。


#if、#elif、#else ディレクティブ

#if expression
   // conditional codes
#endif

ここで、 整数型の式です (整数、文字、算術式、マクロなど)。

expression の場合にのみ、条件コードがプログラムに含まれます ゼロ以外の値に評価されます。

オプションの #else ディレクティブは #if で使用できます

#if expression
   conditional codes if expression is non-zero
#else
   conditional if expression is 0
#endif

#if...#else にネストされた条件を追加することもできます #elif を使用

#if expression
    // conditional codes if expression is non-zero
#elif expression1
    // conditional codes if expression is non-zero
#elif expression2
    // conditional codes if expression is non-zero
#else
    // conditional if all expressions are 0
#endif

#定義済み

特殊演算子 #defined 特定のマクロが定義されているかどうかをテストするために使用されます。 #if と一緒によく使われます

#if defined BUFFER_SIZE && BUFFER_SIZE >= 2048
  // codes

定義済みマクロ

C プログラミングで定義済みのマクロを次に示します。

マクロ
__DATE__ 現在の日付を含む文字列
__FILE__ ファイル名を含む文字列
__LINE__ 現在の行番号を表す整数
__STDC__ ANSI 標準 C に従う場合、値はゼロ以外の整数です
__TIME__ 現在の日付を含む文字列。

例 3:__TIME__ を使用して現在の時刻を取得する

次のプログラムは、__TIME__ を使用して現在の時刻を出力します。 マクロ。

#include <stdio.h>
int main()
{
   printf("Current time: %s",__TIME__);   
}

出力

Current time: 19:54:39

おすすめの読み物


C言語

  1. R、L、Cのまとめ
  2. C# のキーワードと識別子
  3. C# クラスとオブジェクト
  4. C# の抽象クラスとメソッド
  5. C# 部分クラスと部分メソッド
  6. C# の封印されたクラスとメソッド
  7. C# プリプロセッサ ディレクティブ
  8. C キーワードと識別子
  9. C - 定数とリテラル
  10. C - 入力と出力
  11. C - プリプロセッサ