• 締切済み

#define 文で可変個のパラメータを引き渡す方法は有りますか

 下記のように printf() を sprintf() に置換える実験をしています。 #define printf( Param )  sprintf(str, Param )  上記の方法では、Param 部分が可変個の変数では上手く行きません。  次の方法ではエラーになります。 #define printf( Param,... )  sprintf(str, Param,... ) #define printf( (Param) )  sprintf(str, (Param) )  #define 文で可変個のパラメータを引き渡す方法は有りますか?

みんなの回答

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

古い規格のCにはありません 例えば #define printf myprintf として void myprintf(char * fmt,...){ (略) vsprintf(str,fmt,vl) } 等と自前の関数へ置きかえる、等の方法があります。 C99以降だと、可変引数が使えます。 このあたりを参考に http://seclan.dll.jp/c99d/c99d02.htm#dt19990405

goya_1954
質問者

お礼

 早速の回答ありがとう御座いました。  教えて頂いたURLは大変参考になりました。

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.1

#define文ではなく#define指令です。 今回の方法は、少なくとも現行規格では次のようにすれば実現できます。 #define printf(...) sprintf(str, __VA_ARGS__)

goya_1954
質問者

お礼

 早速の回答有難うございます。  このコーナーで jacta さんの回答をよく見ています。  __VA_ARGS__ について調べました。私の環境はルネサスH8のHEWなのですが、「__VA_ARGS__」には対応していないようです。  VA_ARGS の前後の半角2文字づつのアンダースコアーも間違えなく書いたのですが、駄目でした。  どうも有難う御座いました。

関連するQ&A