c - ¿Qué devuelve printf?
(4)
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?
La referencia de printf()
de MSDN :
Devuelve el número de caracteres impresos o un valor negativo si se produce un error.
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 <stdio.h>
) y devuelve un int
, que es el número de caracteres emitidos. Si se produce un error, el número es negativo.
Para agregar un detalle de refinamiento a otras respuestas finas:
printf()
devuelve un int
, sin embargo, ¿eso indica caracteres transmitidos frente a 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 codificación. 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?
int
. En caso de éxito, se devuelve el número total de caracteres escritos. En caso de fallo, se devuelve un número negativo.