第12問

ある数式を計算するための関数を作りました。これをマクロで書き換えたところ、なぜか実行結果が変わってしまいました。

なぜ動作が変わってしまったのか、理由が分かりますか?

以下は、元のプログラムです。

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になってるんですね。
マクロがどのように展開されるのか考えてみましょう。