2011-07-04 16 views
0

glibcのprintf("% .0d",0)がスペースを表示し、printf("%+.0d",0)がプラス記号を出力し、glib printfテストがこの動作をチェックします。しかしそれは正しいですか?標準(7.19.6.1)から:printf( "%.0d"、0)は空白を出力しますか? printf( "%+ .0d"、0)はプラスを出力しますか?

+符号付き変換の結果は常にプラス記号またはマイナス記号で始まります。

スペース符号付き変換の最初の文字が符号ではない場合、または符号付き変換の結果が文字でない場合は、次のようになります(このフラグが指定されていない場合は符号付きで始まります)。スペースは結果の前に置かれます。 spaceと+フラグが両方とも表示された場合、スペースフラグは無視されます。 d指定子ため精度に関するしかし

ゼロの精度でゼロ値を変換した結果は、ない文字あります。

当然のことながら、この「文字なし」ルールが要求さにフィールドをパディング妨げるものではありませんが、私の知る限り、前置スペースまたは+は、変換の一部であり、これを受け"文字なし"のルール。

この問題はこれまで明確になっていますか?

答えて

3

いいえ、それは修飾語なしの基本的な変換についてです。そのため、モディファイアは、基本的な変換で文字が生成されない場合の動作を具体的に示しています。

+1

これは明らかです。私がそれを逃した方法を知らない。 –

+0

一般的な規則は、フォーマットの結果は予測可能でなければならないということです。数値変換は特定の規則に従います(できるだけ浮動小数点は本質的にCPU間で合理化が難しい)。修飾子は非常に簡単な追加規則変換の結果には依存しません。 – geekosaur

関連する問題