プリプロセッサ


プリプロセッサとは

C言語では、ソーステキストをコンパイルする前に、プリプロセッサ と呼ばれるフィルタで前処理を行う。ここで行われる処理は、 等である。

コメント

/**/で囲った部分は、コメントとして コンパイルする前に削除される。

    x = 0; /* initialize x */

    /* add y to x */
    x += y;

のように使う。

  /*
    x += y;
    x *= 2;
  */

のように複数行にまたがることも出来る。

//はC++の書き方で、そこから行末までが削除される。

    // x += y;
    // x *= 2;

のような感じ。C++で導入された書き方ではあるが、大半の Cコンパイラで一応使うことが出来るようだ。

コメントはプログラムの動作には全く関係が無いが、 プログラムを読みやすくために積極的にコメントを付けることが 推奨される。

マクロ

#define PAI 3.1415

...

a = sin(2 * PAI * x);
b = cos(2 * PAI * x);

...

のように使う。
#define ABS(x, y) sqrt((x)*(x) + (y)*(y))

...

a = ABS(b + 1.0, 2.0);

...

のように引数を伴ったマクロもある。

#ifdef PAI

...(A)

#else

...(B)

#endif
のようになっていたら、もしPAIが定義されていたら(A)の部分は生きて (B)の部分は削除される。 定義されてなければ、(A)の部分は削除されて(B)の部分は生きる。
#if defined(PAI)

...

#else

...

#endif
でも同じ。defined表記を使えば、
#if defined(PAI) || defined(EXP)

...

#endif
のような書き方も出来る。

#include <stdio.h>
printf等を使うときのお馴染みの表記だが、これは 実は/usr/include/stdio.hというファイルをその部分に 読み込めという命令である。自分で作ったファイルが カレントディレクトリに置いてあってそれを読むときは、
#include "myheader.h"
のように""で囲む。

なお、コメントのネストが出来ない問題を解決するため、

#if 0

...

#endif
というコメント化がよく使われる。
プリプロセッサ