ある数式を計算するための関数を作りました。これをマクロで書き換えたところ、なぜか実行結果が変わってしまいました。
なぜ動作が変わってしまったのか、理由が分かりますか?
以下は、元のプログラムです。
main.c
#include <stdio.h>
#include <stdlib.h>
int ValueFor(int x) {
return 2 * x + 1;
}
int main(void) {
printf("Value is %d\n", ValueFor(2 + 3));
return EXIT_SUCCESS;
}
実行結果
Value is 11
以下は、書き換えたプログラムです。意図に反して、実行結果が変わってしまいました。
main.c
#include <stdio.h>
#include <stdlib.h>
#define VALUE_FOR(X) 2 * X + 1
int main(void) {
printf("Value is %d\n", VALUE_FOR(2 + 3));
return EXIT_SUCCESS;
}
期待とは異なる実行結果
Value is 8
数式「y=2x+1」を計算するプログラムになっているのが分かるかしら?
はい。「x=2+3」のときの「y」の値を求めてるんですね。
ということは、計算が正しければ11が表示されるはずなのだけど……
なぜか8になってるんですね。
マクロがどのように展開されるのか考えてみましょう。