printfが使いにくいのは引数の扱いだ。
printf("a=%d, b=%d, c=%d\n", a, b, c);
このくらいならばいい。しかし引数が長くなっていくと(例えば数十個とかになると)すぐに破綻するのは周知の通り(たぶん。それともおれだけか??)。これを破綻させないようにしようとすると、複数のprintfに分割ということになってしまう。しかし、本当に分割する必要があるだろうか? 1回の呼び出しでも破綻しないようにprintfを作ることはできるはずだ。
第1引数がフォーマット文字列で、第2引数以降がフォーマットへの引数というのが悪化の原因であると思う。だからいっそのこと、このようにしてみたらどうか?
printf("a=%d, %+", a, "b=%d, %+", b, "c=%d\n", c);
フォーマット文字列で例えば「%+」が出現したら(「%+」は既存のフォーマット文字列でも意味があるので別なものを選ぶ必要はあるけど)、次の引数をフォーマット文字列の続きとして扱う。これで”%d”と引数の位置が近くなり、長いprintfも見易くなると思われる。
…C++を使え、という話もあるけどね。
こういうことを考えちゃうのも才能なんだろうな。—–