0
glibc的printf("% .0d",0)
打印一个空格,并且printf("%+.0d",0)
打印一个加号,并且glib printf测试检查此行为。但它是正确的吗?从标准(7.19.6.1)开始:应该printf(“%.0d”,0)打印一个空格吗? printf(“%+。0d”,0)打印一个加号?
+签名转换的结果总是以加号或减号开头。 (如果未指定此标志,则仅在转换为负值时才以符号开头)
空格如果签名转换的第一个字符不是符号,或者如果签名转换不生成任何字符,空格以结果为前缀。如果空格和+标志都出现,空格标志将被忽略。
然而,关于精度为d
说明符:
转换零值为零的精度的结果是没有字符。
当然这种“没有字符”的规则并不排除填充字段到所请求的宽度,但据我所知,该前缀空间或+
是转换的一部分,并因而受到“无字符”规则。
这件事情有没有澄清过?
对于空间这是显而易见的;不知道我是如何错过它的。对于plus来说,它似乎是不明确的.. –
一般规则是格式化的结果应该是可预测的:数值转换遵循特定规则(尽可能;浮点本质上很难在CPU之间合理化),修饰符遵循非常简单的附加规则这不依赖于转换的结果。 – geekosaur