短すぎたマクロの引数 ― 2007年10月26日 13時17分39秒
ある、関数の宣言を変える必要があった。その関数は、元々、最低六つも引数を取り、一つのファイルで大量に呼ばれていた。この関数は、可変長の引数を取るように変更された。
あまりに多かったので、一つずつ書き換えるのが面倒で、マクロを使ったのだった。そこで、マクロの引数の名前に、単純にアルファベットを一文字ずつ使ったのが間違えだった。
例としてはこんな感じだ。少し、簡略化した。
#define printf(a, d, f) printf(a " %d", d, f, 0)
printf("%i %f", 3, 2.4);
なお、gcc でプリプロセッサを走らせると以下のようになる。こうなるのを期待していた。
printf("%i %f" " %d", 3, 2.4, 0);
ところが、VOS C コンパイラは、
printf("%i %f" " %3", 3, 2.4, 0);
を出力したのだ。文字列の中の d がマクロによって書き換えられていた。
どちらの動作が正しいのかは知らない。しかし、プリプロセスで処理を止めるまでは、なぜそのような出力になるのか分からなかったのは久しぶりだ。
コメント
トラックバック
このエントリのトラックバックURL: http://uyota.asablo.jp/blog/2007/10/26/1872500/tb
※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。
コメントをどうぞ
※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。
※なお、送られたコメントはブログの管理者が確認するまで公開されません。