読者です 読者をやめる 読者になる 読者になる

yashigani?.days

週刊少年ジャンプについてだらだら書きます

マクロ難しい

マクロ初めて使ったら変な動きしてあせったので調べてみた

#include <stdio.h>

#define max(a, b) ((a > b) ? a : b)

int hoge (int a) {
  printf ("hoge! ");
  return ++a;
}

int main (int argc, char* argv[]) {
  int foo = 1;
  int bar = 2;

  max (bar, hoge (foo));
  
  return 0;
}


実行結果

> ./macro 
hoge! hoge!


マクロについて調べてみると,どうやらコンパイル時に展開してるらしい
つまりこうなってるわけか

((bar > hoge (foo)) ? bar : hoge (foo))


思いがけない動作して大変
気をつけないと