¿Qué devuelve printf?

Hoy en mi entrevista, el entrevistador preguntó: printf es una función y cada función devuelve algo; int, void, float, etc. Ahora, ¿qué devuelve printf ya que es una función?

int . En caso de éxito, se devuelve el número total de caracteres escritos. En caso de fallo, se devuelve un número negativo.

Ver referencia aquí

No todas las funciones devuelven algo, lo que se indica mediante el uso de void :

 void function_returns_nothing(void); 

printf es una función (declarada en ) y devuelve un int , que es el número de caracteres emitidos. Si se produce un error, el número es negativo.

La referencia de printf() de MSDN :

Devuelve el número de caracteres impresos o un valor negativo si se produce un error.

Para agregar un detalle de refinamiento a otras respuestas finas:

printf() devuelve un int , sin embargo, ¿eso indica los caracteres transmitidos frente a los impresos / escritos ?

La función printf devuelve el número de caracteres transmitidos , o un valor negativo si se produce un error de salida o de encoding. C11dr §7.21.6.3 3 (mi énfasis)

En caso de éxito, se devuelve el número transmitido . stdout normalmente se almacena en búfer , por lo que la cantidad de caracteres impresos puede no realizarse o fallar hasta más tarde.

Cuando int printf() tiene problemas por varias razones, devuelve un número negativo. Se desconoce el número de caracteres transmitidos .

Si se produce un siguiente fflush(stdout) exitoso, entonces el valor no negativo de printf() es ciertamente el número impreso .

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

Tenga en cuenta que “imprimir” un '\n' normalmente elimina la stdout , pero incluso esa acción no está especificada.
¿Cuáles son las reglas de la descarga automática de stdout buffer en C?