簡體   English   中英

為什么printf在C中返回int而不是size_t

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM