0
glibc的printf("% .0d",0)
打印一個空格,並且printf("%+.0d",0)
打印一個加號,並且glib printf測試檢查此行爲。但它是正確的嗎?從標準(7.19.6.1)開始:應該printf(「%.0d」,0)打印一個空格嗎? printf(「%+。0d」,0)打印一個加號?
+簽名轉換的結果總是以加號或減號開頭。 (如果未指定此標誌,則僅在轉換爲負值時才以符號開頭)
空格如果簽名轉換的第一個字符不是符號,或者如果簽名轉換不生成任何字符,空格以結果爲前綴。如果空格和+標誌都出現,空格標誌將被忽略。
然而,關於精度爲d
說明符:
轉換零值爲零的精度的結果是沒有字符。
當然這種「沒有字符」的規則並不排除填充字段到所請求的寬度,但據我所知,該前綴空間或+
是轉換的一部分,並因而受到「無字符」規則。
這件事情有沒有澄清過?
對於空間這是顯而易見的;不知道我是如何錯過它的。對於plus來說,它似乎是不明確的.. –
一般規則是格式化的結果應該是可預測的:數值轉換遵循特定規則(儘可能;浮點本質上很難在CPU之間合理化),修飾符遵循非常簡單的附加規則這不依賴於轉換的結果。 – geekosaur