通常のプログラムで使うif文のような構文が、
プリプロセッサにもあります。
// 構文
#if 条件
何らかの処理
#elif 条件
何らかの処理
#else
何らかの処理
#endif
条件に合った部分の処理だけをコンパイル対象とします。
#define定数を使う方法
このプログラム例では、#define定数 NUMの値を変える事によって、
コンパイル対象としたい部分を切り替えられます。
#include <stdio.h>
#define NUM 1
void main(void) {
#if NUM == 0
処理1
#elif NUM == 1
処理2
#else
その他
#endif
}
デバッグ時だけに実行されるコードを書いておき、
#ifや#ifdefで切り分けて使用される事が多いです。
コメントアウト機能として使う #if 0
#include <stdio.h>
void main(void) {
int i=0;
/*
printf("i = %d\n", i); /* デバッグ用 */
*/
printf("i = %d\n", i);
}
こんなコードがあったとすると、
printf関数の部分のコードがコメントアウトできません。
しかし、次のようにすると、可能となります。
#include <stdio.h>
void main(void) {
int i=0;
#if 0
/*
printf("i = %d\n", i); /* デバッグ用 */
*/
#endif
printf("i = %d\n", i);
}
#if 0と言う表記があります。
0は偽の値を示しますから、
#if 0 の下に記述されるコードは常にコンパイルされない事になります。
これで疑似的にコメントアウト機能として使えると言うワケです。
ちなみにコメントアウトを解除したい場合は、#if 1 と書けばOKです。
#ifdefについては、こちらのページをご覧ください。