他の人のソースコードをみて、va_listを使っているのがあって、そういえば、自分では使ったことがなかったなと思い、可変長引数を受けとって処理するva_list, va_start, va_arg, va_endを使ってみました。
おおまかな使い方は行かな感じ。
void hoge(const char *fmt, ...) { va_list list; va_start(list, fmt); ... // fmt以降の引数を順次取り出し va_arg(list, int); // int型の引数を取り出し va_arg(list, char *); // char *型の引数を取り出し ... va_end(list); }
似たような奴にvsprintfとかあるんですが、使いどきがわからないです。
C++使っていればそんなに使う機会ないのかも。
無駄にCっぽく書いてますが、C++でコンパイルしています。
なんかメモリリークが心配になりそうなコードですが・・・。多分大丈夫でしょう。Cはデバッグ難しいですよね。一回あれれってなってgdb使ってました。でもめんどくさくなってきて途中でprintfしました。
ソースコード
printfっぽいものを実装。
にしても、安直に書くと、関数に渡した文字列を破壊してしまうコードを書きがちですよね。とはいえCはそういうのが多いからいいかと思ったり・・・。どういうスタイルで書くべきなのかっていうのはコードをもっと読まなきゃダメっすね・・・。