Должен ли printf ("% .0d", 0) печатать пробел? printf ("% +. 0d", 0) печатать плюс? - PullRequest
0 голосов
/ 04 июля 2011

glibc's printf("% .0d",0) печатает пробел, а printf("%+.0d",0) печатает знак плюс, и тест glib printf проверяет это поведение.Но правильно ли это?Из стандарта (7.19.6.1):

+ Результат преобразования со знаком всегда начинается со знака плюс или минус.(Он начинается со знака только тогда, когда отрицательное значение преобразуется, если этот флаг не указан.)

пробел Если первый символ преобразования со знаком не является знаком или если в результате преобразования со знаком нет символовк результату добавляется пробел.Если появляются пробел и флаги +, флаг пробела игнорируется.

Однако в отношении точности для спецификатора d:

Результат преобразования нулязначение с точностью до нуля равно без символов .

Естественно, это правило "без символов" не исключает заполнения поля до запрашиваемого значения width , нонасколько я могу судить, префиксный пробел или + является частью преобразования и, следовательно, подчиняется правилу "без символов".

Прояснялось ли когда-либо это дело?

1 Ответ

3 голосов
/ 04 июля 2011

Нет, речь идет об основном преобразовании без модификаторов; вот почему модификаторы специально говорят, что они делают, когда базовое преобразование не дает символов.

...