glibc's printf("% .0d",0)
печатает пробел, а printf("%+.0d",0)
печатает знак плюс, и тест glib printf проверяет это поведение.Но правильно ли это?Из стандарта (7.19.6.1):
+ Результат преобразования со знаком всегда начинается со знака плюс или минус.(Он начинается со знака только тогда, когда отрицательное значение преобразуется, если этот флаг не указан.)
пробел Если первый символ преобразования со знаком не является знаком или если в результате преобразования со знаком нет символовк результату добавляется пробел.Если появляются пробел и флаги +, флаг пробела игнорируется.
Однако в отношении точности для спецификатора d
:
Результат преобразования нулязначение с точностью до нуля равно без символов .
Естественно, это правило "без символов" не исключает заполнения поля до запрашиваемого значения width , нонасколько я могу судить, префиксный пробел или +
является частью преобразования и, следовательно, подчиняется правилу "без символов".
Прояснялось ли когда-либо это дело?