- 締切済み
#define 文で可変個のパラメータを引き渡す方法は有りますか
下記のように printf() を sprintf() に置換える実験をしています。 #define printf( Param ) sprintf(str, Param ) 上記の方法では、Param 部分が可変個の変数では上手く行きません。 次の方法ではエラーになります。 #define printf( Param,... ) sprintf(str, Param,... ) #define printf( (Param) ) sprintf(str, (Param) ) #define 文で可変個のパラメータを引き渡す方法は有りますか?
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- kmee
- ベストアンサー率55% (1857/3366)
古い規格のCにはありません 例えば #define printf myprintf として void myprintf(char * fmt,...){ (略) vsprintf(str,fmt,vl) } 等と自前の関数へ置きかえる、等の方法があります。 C99以降だと、可変引数が使えます。 このあたりを参考に http://seclan.dll.jp/c99d/c99d02.htm#dt19990405
- jacta
- ベストアンサー率26% (845/3158)
#define文ではなく#define指令です。 今回の方法は、少なくとも現行規格では次のようにすれば実現できます。 #define printf(...) sprintf(str, __VA_ARGS__)
お礼
早速の回答有難うございます。 このコーナーで jacta さんの回答をよく見ています。 __VA_ARGS__ について調べました。私の環境はルネサスH8のHEWなのですが、「__VA_ARGS__」には対応していないようです。 VA_ARGS の前後の半角2文字づつのアンダースコアーも間違えなく書いたのですが、駄目でした。 どうも有難う御座いました。
お礼
早速の回答ありがとう御座いました。 教えて頂いたURLは大変参考になりました。