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
ステートメントは実行時にテストされ、コードのブロックを実行する必要があるかどうかを確認しますが、条件は実行前にプログラムにコードのブロックを含める (またはスキップする) ために使用されます。
条件付きの使用
- マシンやオペレーティング システムに応じて異なるコードを使用する
- 2 つの異なるプログラムで同じソース ファイルをコンパイルする
- 特定のコードをプログラムから除外するが、将来の目的のために参照として保持する
条件付きの使い方
条件付きを使用するには、#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言語