関数形式マクロ

関数形式マクロを利用したプログラムの例

#include<stdio.h>
#define sqr(x) ( (x)  *  (x) )

int main(void){
        int nx; 
        double dx; 

        printf("整数を入力してください。");
        scanf("%d",&nx);
        printf("その数の2乗は%dです。\n",sqr(nx));
        printf("実数を入力してください。");
        scanf("%lf",&dx);
        printf("その数の2乗は%fです。\n",sqr(dx));

        return 0;
}
#define sqr(x) ( (x) * (x) )

この部分は、これ以降にsqr(x)のという形の式があれば、それを( (x) * (x) )と展開せよ。というような指示。

関数と同じ感覚で、しかも型に依存せずに使える。

二つの値の差を返す関数形式マクロ

#include<stdio.h>
#define diff(x,y) ((x)>(y)?(x)-(y):(y)-(x))

int main(void){
        int x,y;
        double dx,dy;

        puts("二つの整数を入力してください。");
        printf("1:"); scanf("%d",&x);
        printf("2:"); scanf("%d",&y);
        printf("二つの整数の差は%dです。\n",diff(x,y));

        puts("二つの実数を入力してください。");
        printf("1:"); scanf("%lf",&dx);
        printf("2:"); scanf("%lf",&dy);
        printf("二つの実数の差は%fです。\n",diff(dx,dy));

        return 0;
}