printf返回什么?

今天在我的采访中,采访者问:printf是一个函数,每个函数都返回一些东西; int,void,float等。现在printf返回什么,因为它是一个函数?

int 。 成功时,返回写入的字符总数。 失败时,返回负数。

请参阅此处的参考

并非每个函数都返回一些东西,使用void表示:

 void function_returns_nothing(void); 

printf是一个函数(在声明)并返回一个int ,即输出的字符数。 如果发生错误,则该数字为负数。

printf()来自MSDN的参考:

返回打印的字符数,如果发生错误则返回负值。

要将细节细化添加到其他精细答案:

printf()返回一个int ,但这是否表示传输打印/写入的字符?

printf函数返回传输的字符数,如果发生输出或编码错误,则返回负值。 C11dr§7.21.6.33(我的重点)

成功时,返回传输的数量。 stdout通常是缓冲的 ,因此打印的字符数可能无法实现或直到稍后才会失败。

int printf()因各种原因出现问题时,它会返回一个负数。 传输的字符数是未知的。

如果发生以下成功的fflush(stdout) ,则printf()的非负值肯定是打印的数字。

 int transmitted = printf(......); int flush_retval = fflush(stdout); int number_certainly_printed = -1; // Unknown if (transmitted >= 0 && flush_retval == 0) { number_certainly_printed = transmitted; } 

请注意,“打印” '\n'通常会刷新stdout ,但是甚至没有指定该操作。
在C中自动刷新stdout缓冲区的规则是什么?