その1

#defineでマクロを書くときは気を付けないと危険です。
例えば、


#define hoge(X) if (X==0) {} elsif (X==1) {}
hoge(++N);

インクリメントされたNではなく「++N」自体が渡される為、
評価される度に値が変わってしまいます。


もう一つ。


#define hoge(X)\
    (sin(X) + cos(X));
int n = hoge(100) + 100;

修正を繰り返すうちに残してしまったんだと思いますが、敵は#defineディレクティブの最後のセミコロンです。
展開されると+100は単独式として評価されて、nは意図した値になりません。
コンパイラによってはWarningも何もないのでお気を付けください(;´ω`)

hogeまでキーワードにΣ(゜д゜;)

はてなダイアリーのキーワード、ぷちトリビアが載っててなかなか面白いです。