通常、次のようなことをするとき:
printf ( " %.*f ", 2, 3.3 );
精度幅は 2 に設定されており、3.30が出力されます。しかし、幅に負の値が与えられた場合はどうでしょうか。
printf ( " %.*f ", -2, 3.3 );
出力は3.300000で、これはデフォルトの幅が使用されていることを意味します。では、この-2はここで何をしているのでしょうか?
負の精度は、精度が省略されたかのように使用されます。
ソース: C99 7.19.6.1 ( http://port70.net/~nsz/c/c99/n1256.html#7.19.6.1の HTML バージョン)
または POSIX から (読みやすい): http://pubs.opengroup.org/onlinepubs/9699919799/functions/printf.html
後期C11標準ドラフトによると(7.21.6.1):
負の精度の引数は、精度が省略されたかのように解釈されます。
(はい、それはのためですfprintf
、そしてこれはドラフトがprintf
(7.21.6.3)について言っていることです:)
printf関数は、printfの引数の前に引数stdoutが挿入されたfprintfと同等です。