【发布时间】:2011-07-04 04:58:12
【问题描述】:
glibc 的printf("% .0d",0) 打印一个空格,printf("%+.0d",0) 打印一个加号,glib printf 测试检查这种行为。但它是正确的吗?来自标准(7.19.6.1):
+ 有符号转换的结果总是以加号或减号开头。 (如果不指定此标志,则仅在转换负值时才以符号开头。)
space 如果有符号转换的第一个字符不是符号,或者如果有符号转换没有字符,则在结果前加一个空格。如果空格和 + 标志都出现,则忽略空格标志。
但是,关于 d 说明符的精度:
以零精度转换零值的结果是无字符。
当然,这个“无字符”规则不排除将字段填充到请求的宽度,但据我所知,前缀空格或+ 是转换的一部分,并且因此受制于“无字符”规则。
这件事有没有澄清过?
【问题讨论】:
标签: c standards printf language-lawyer