( 子の本棚にC言語入門の本が落ちてたので、勉強してみよっと )
【 実行プログラム 】
【 ソースプログラム 】
#include <stdio.h>
int main(void)
{
int nx;
double dx;
printf("整数を入力ください:");
scanf("%d", &nx);
printf("その数の二乗は%d\n", sqr(nx));
printf("実数を入力ください:");
scanf("%lf", &dx);
printf("その数の二乗は%f\n", sqr(dx));
return (0);
}
【 まなび 】
■ 通常の関数を利用した場合は・・・
int sqr_int(int x)
{
return (x * x);
}
double sqr_double(double x)
{
return (x * x);
}
のように、型ごとの使い分けが必要となってしまう。
それを避けることができる方法として、関数形式マクロの利用がある。
■ ()で囲んでおくと安心
#define sqr(x) x * x
でも本件では動作するが・・・
例えば、xがa + bであるような場合には、
a + b × a + b
と置換されるので、b × a が先に実行されてしまう。
このような事故を予防する意味で、
のように()を付けておくことが理想的である。
■ 副作用には注意が必要
例えば、sqr(a++)だと、((a++)*(a++))となり、
後半のa++は、前半のa++でインクリメントされた状態となってしまう。
************************************************
【 演習8-1 】
二つの値xとyの差を求める関数形式マクロを定義せよ。
diff(x, y)
#include <stdio.h>
int main(void)
{
int x, y;
printf("1つ目の整数を入力せよ:");
scanf("%d", &x);
printf("2つ目の整数を入力せよ:");
scanf("%d", &y);
printf("その数の差は%d\n", diff(x, y));
return (0);
}