Подтвердить что ты не робот

Что возвращает printf?

Сегодня в моем интервью интервьюер спросил: printf - это функция, и каждая функция возвращает что-то; int, void, float и т.д. Теперь, что возвращает printf как функция?

4b9b3361

Ответ 1

int. При успешном завершении возвращается общее количество символов. При отказе возвращается отрицательное число.

См. ссылку здесь

Ответ 2

Не каждая функция возвращает что-то, что указано с помощью void:

void function_returns_nothing(void);

printf - это функция (объявленная в <stdio.h>), и она возвращает int, которая представляет собой количество выводимых символов. Если возникает ошибка, номер отрицательный.

Ответ 3

printf() ссылка из MSDN:

Возвращает количество напечатанных символов или отрицательное значение при возникновении ошибки.

Ответ 4

Чтобы добавить уточнение детали к другим прекрасным ответам:

printf() возвращает int, но указывает ли это на переданные или печатные/записанные символы?

Функция printf возвращает количество символов передано или отрицательное значение, если произошла ошибка вывода или кодирования. C11dr §7.21.6.3 3 (мой акцент)

При успешном завершении возвращается номер. 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;
}

Обратите внимание, что "печать" a '\n' обычно сбрасывает stdout, но даже это действие не указано.
Каковы правила автоматического сброса буфера stdout в C?