C言語 #ifとは? 条件付きコンパイル

通常のプログラムで使う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については、こちらのページをご覧ください。