C言語でマクロをコンパイルする方法

C言語では、マクロはコンパイル時ではなく、プリプロセス時に展開されます。コンパイラはマクロを展開してからソースコードをコンパイルします。

マクロを展開するには、まずマクロを定義してから、ソースコード内で使用することで、コンパイル時にプリプロセス段階で展開されます。

これは一例です

#include <stdio.h>

#define MAX(a, b) (((a) > (b)) ? (a) : (b))

int main() {
    int x = 10;
    int y = 20;
    int max = MAX(x, y);

    printf("The maximum value is %d\n", max);

    return 0;
}

上の例では、数値の大きい方を返すマクロ MAX(a, b) を定義しています。このマクロをメイン関数の中で使って変数 x と y の大きい方を計算すると、その結果が変数 max に書き込まれます。コンパイラはこのコードをコンパイルするときに、まずマクロを展開して次のように書き換えます。

int main() {
    int x = 10;
    int y = 20;
    int max = (((x) > (y)) ? (x) : (y));

    printf("The maximum value is %d\n", max);

    return 0;
}

あとはコンパイルとリンクを行って実行可能ファイルにするだけだ。

マクロの展開はプリプロセス段階で行われるので、コンパイル時にマクロ展開後のコードを見ることはできないことに注意して下さい。もしマクロ展開後のコードを見たい場合には、プリプロセスを単独で行うプリプロセッサを使います。例えば、gcc の -E オプションを使用します。

bannerAds