久しぶりにマクロを使って落とし穴にはまる

最近は C++ ばかり使っていたためか,久しぶりに C 言語を書いていてマクロの落とし穴にはまってしまいました.落とし穴というのは,do while トリックを使ったマクロの内部で変数を用意したところ,マクロの引数として渡される変数の名前と被って期待通りの結果にならなかったというものです.

たとえば,以下のマクロを使うとき,&value を第一引数(dest)として渡すと楽しいことになります.楽しすぎて睡眠時間が減りかねないので注意してください.

#define MACRO(dest, src) do {\
  int64_t value;\
  value = ...;\
  memcpy(dest, &value, sizeof(value));\
} while (0)

マクロを使うのが久しぶりだったおかげで,マクロの内部では変数に対する名前の付け方を変えるべきなのを忘れていたというオチです.