c

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.

Ver referencia aquí