腕時計の沼、オーディオの沼、PCの沼。『タクジの沼』

プリプロセッサ

プリプロセッサとは、メインとなる処理の前に実施する前処理プログラムのことを指します。

#define

配列サイズ指定を行うケースで使用するのが、最も基本的は用法です。

[例]
#define ARRAY_SIZE (16)
...
int	array[ARRAY_SIZE];
...
for( i = 0; i < ARRAY_SIZE; i++ ){
	array[i] = 0;
}
/* #defineの1ヵ所を変更することで、全てのコードを自動的に変更できる */

条件付きコンパイル
(#if、#else、#elif、#endif、#ifdef、#ifndef)

プログラムのソースコードの一部を選択的にコンパイルできるようにします。

一般形式

#if 定数式		/* 「定数式」の値が真であれば「文の並び」がコンパイル、偽の場合「文の並び」を飛ばす */
	文の並び
#endif
#if 定数式
	文の並び
#else			/* #ifで指定した条件に合わなかった場合の代替の文を指定するには、#elseを使うことができる */
	文の並び
#endif			/* #elseは自動的に#if文のブロックを終了させる */

#elif

一般形式のif-else-ifの連続記述

#if 定数式1
	文の並び
#elif 定数式2		/* 最初に見つかった真の式に関連付けられた一連のコードがコンパイルされ、それ以外のコードはスキップされる */
	文の並び
#elif 定数式3
	文の並び
	...
#endif

#ifdef

#ifdef マクロ名		/* 「マクロ名」が現在定義されていると、#ifdefに関連付けられている「文の並び」がコンパイルされる */
	文の並び		/* そうでない場合、それらの文は飛ばされる */
#endif

#ifdefの反対は、#ifndefである。 一般形式は#ifdefと同様で、唯一の違いは#ifndefに関連付けられる文の並びがマクロ名が定義されていない場合のみコンパイルされるという点。