C言語の基礎
前へ 目次へ 次へ 

7 プリプロセッサ

 プログラムがコンパイルされる前に、プリプロセッサがプログラムに対して、語句の置き換えや、別ファイルの取り込みなどの処理をする。
 例えば、処理可能な最大値を変数maxに代入するとき、

max = 100;

と書くよりも

max = JOB_MAX;

のように、略語などで書く方がプログラムが読みやすくなる。このJOB_MAXに100という値をプリプロセッサの命令で定義しておくと、コンパイル前にプリプロセッサによって100に置き換えられる。
 プリプロセッサの機能を利用するには、#で始まるキーワード(命令と考えて良い)を使う。


7-1 プリプロセッサのキーワード

(1) #define

#define MACRO words
#define MACRO(par1,...) words

 マクロ名MACROに対して、語句wordsを定義する。プログラム中で定義されている行以降にMACROという単語があると、プリプロセッサによってwordsに置き換えられる。

#define JOBMAX 1000
int x = JOBMAX;

は、プリプロセッサ処理後

int x = 1000;

に置き換えられる。また、

#define WA(a, b) a + b
int x = 100, y = 200, z;
z = WA(x, y);

は、同様に

int x = 100, y = 200, z;
z = x + y;

に置き換えられる。

/* sample52.c */
#include <stdio.h>
#define WA(a, b) a + b
int main(void)
{
    int x = 100, y = 200, z;
    z = WA(x, y);
    printf("z = %d\n",z);
}

(2) #undef

#undef MACRO

 #defineで定義されたマクロ名を無効にする。

(3) #include

#include <filename>
#include "filename"

 別のファイルfilenameをプログラム中の#includeの位置に取り込む。
 <filename>と"filename"の違いは、filenameを探す順番が違うことである。

<filename> システムのディレクトリから探す。
"filename" ユーザのディレクトリを探し、なければシステムのディレクトリを探す。

(4) その他

#if〜#elif〜#else〜#endif

#ifdef〜#else〜#endif

#ifndef〜#else〜#endif

#line


前へ 目次へ 次へ 
Copyright © 2001 Hiroshi Masuda 

 

 

inserted by FC2 system