関数形式マクロ
関数形式マクロを利用したプログラムの例
#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; }