2014年3月12日水曜日

xprintfに引数で最小フィールド幅を指定する機能を追加する

stdio.hのprintf関数には最小フィールド幅というものがあります
例えば
printf("%05d", 123);
というコードの場合は"00123"という風に、指定した文字数(今回は5)に足りない場合に空白や0で埋めるという機能です

この機能はもちろんxprintfにもあり、同じように使うことができます

しかし、printfの地味な機能として、この最小フィールド幅を引数で指定することができます
printf("%0*d", 5, 123);
という感じです
最初のサンプルではフォーマットの中に5と指定していた部分をアスタリスクに置き換え、数字を引数として渡しています

この機能をxprintfで使えるようにしてみました

変更方法は
if (!w && c == '*') { w = va_arg(arp, unsigned int); c = *fmt++; }
をvfprintf関数の"/* Minimum width */"というコメントが書いてあるforの次に置くだけです

この機能は数字で最小フィールド幅を指定されていない場合 かつ フォーマットに'*'が書かれていた場合に、引数から最小フィールド幅を取り出す という動作です

あまり使う場面は多くありませんが、たまーに使いたい時があり、結構便利な機能となります

0 件のコメント:

コメントを投稿