printf(“%。0d”,0)应该打印一个空格吗? printf(“%+。0d”,0)打印加号?

时间:2011-07-04 04:58:13

标签: c standards printf language-lawyer

glibc printf("% .0d",0)打印一个空格,printf("%+.0d",0)打印加号,glib printf测试检查此行为。但这是对的吗?从标准(7.19.6.1):

  

+签名转换的结果始终以加号或减号开头。 (如果未指定此标志,则仅在转换负值时以符号开头。)

     

空格如果签名转换的第一个字符不是符号,或者签名转换不会导致字符,则会在结果前面添加一个空格。如果出现空格和+标志,则忽略空格标志。

但是,关于d说明符的精度:

  

将精度为零的零值转换为无字符

当然,这个“无字符”规则并不排除将字段填充到请求的宽度,但据我所知,前缀空格或+是转换的一部分,因此遵守“无人物”规则。

这件事有没有得到澄清?

1 个答案:

答案 0 :(得分:3)

不,它在谈论没有修饰语的基本转换;这就是为什么修改器特别说明当基本转换不产生任何字符时它们做什么。