2011-07-04 45 views
0

glibc的printf("% .0d",0)打印一個空格,並且printf("%+.0d",0)打印一個加號,並且glib printf測試檢查此行爲。但它是正確的嗎?從標準(7.19.6.1)開始:應該printf(「%.0d」,0)打印一個空格嗎? printf(「%+。0d」,0)打印一個加號?

+簽名轉換的結果總是以加號或減號開頭。 (如果未指定此標誌,則僅在轉換爲負值時才以符號開頭)

空格如果簽名轉換的第一個字符不是符號,或者如果簽名轉換不生成任何字符,空格以結果爲前綴。如果空格和+標誌都出現,空格標誌將被忽略。

然而,關於精度爲d說明符:

轉換零值爲零的精度的結果是沒有字符

當然這種「沒有字符」的規則並不排除填充字段到所請求的寬度,但據我所知,該前綴空間或+是轉換的一部分,並因而受到「無字符」規則。

這件事情有沒有澄清過?

回答

3

不,它是在談論沒有修飾符的基本轉換;這就是爲什麼修飾符特別說明當基本轉換不產生字符時他們做了什麼。

+1

對於空間這是顯而易見的;不知道我是如何錯過它的。對於plus來說,它似乎是不明確的.. –

+0

一般規則是格式化的結果應該是可預測的:數值轉換遵循特定規則(儘可能;浮點本質上很難在CPU之間合理化),修飾符遵循非常簡單的附加規則這不依賴於轉換的結果。 – geekosaur