マクロ初めて使ったら変な動きしてあせったので調べてみた
#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))
思いがけない動作して大変
気をつけないと