でも、マクロはいろいろ取り扱いが危険なので、なるべく使うべきでは無いと思うよ。
マクロは結局単なる置き換えに過ぎないし、コンパイラの機能ではないから、
マクロでエラーが発生したときにエラーメッセージからどこが問題かを判断し
にくいということがある。
良くある間違いは置き換えであることを忘れて-つまり関数と勘違いして-
マクロを書いてしまうと括弧を付け忘れたりして予想もしない計算結果になること
もある。

具体的にどうすれば良いかと言うと、配列の要素数を求める計算自体は
それほど複雑でもないので、
o 配列を宣言したすぐ後で要素数を入れる変数を用意しておくか、
o その場その場でsizeof(array)/sizeof(array[0])を実行するか、
した方が良いと思う。