[英]Why does printf return an int instead of a size_t in C
不應該返回size_t
類型的返回值嗎? 因為C中對象的大小屬於這種類型,包括傳遞給printf
的字符串。
為什么printf在C中返回一個int?
不應該是size_t
類型的?
它可能是,但肯定早期的設計決定是容納負EOF
的返回值以指示錯誤。
size_t
是早期設計選擇中的事后想法。 許多函數使用int
,其中size_t
現在在那些標准前的日子里使用。
fprintf()
具有環境限制 “任何單個轉換可以產生的字符數至少應為4095。”因此,任何嘗試長輸出的打印都可能在INT_MAX/SIZE_MAX
關注之前INT_MAX/SIZE_MAX
該限制。
你在很大程度上是正確的 - 實際上printf
應該返回一個更大的類型,因為它理論上可以輸出比可以放入內存的最大對象大小更多的字節,例如printf("%s%s", largest_string, largest_string)
或者甚至是使用場寬/精度的更簡單的例子。
原因只是我們堅持的歷史錯誤。 對於snprintf
尤其糟糕,因為snprintf
被人為地限制為INT_MAX
並且如果您嘗試使用它創建更長的字符串,則會被強制返回錯誤。
當時編譯器不需要函數聲明來調用函數。 沒有聲明或未指定返回類型的函數的返回類型是int
- 隱式int規則。 有些代碼叫做printf
而沒有煩擾#include <stdio.h>
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.