2010-05-16 13 views
17

Hoy en mi entrevista, el entrevistador le 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?¿Qué devuelve printf?

+1

Si una función 'void' no devuelve nada" o "returns' void'" es una cuestión de preferencia lingüística. – AnT

+19

Esta es una pregunta de la entrevista muy mal: nadie debe suponerse que recordar los detalles de cualquier biblioteca, existen documentaciones para eso!Esto significa que podrías tener algo de suerte si no consigues el trabajo. –

+4

pero conseguí el trabajo y acepté la carta de oferta ... y no sé si es bueno o malo, pero es Adobe. Estoy pasado de 2009 y estoy feliz de tener un trabajo en esa compañía ... :-) –

Respuesta

34

int. En caso de éxito, se devuelve la cantidad total de caracteres escritos. En caso de falla, se devuelve un número negativo.

See reference here

8

No todos función devuelve algo, lo cual 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 ocurre un error, el número es negativo.

1

printf() 's de referencia desde MSDN:

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

1

Para añadir un refinamiento de los detalles finos otras respuestas:

printf() devuelve un int, sin embargo, hace que indican transmite vs impresos escritos/ personajes?

La función printf devuelve el número de caracteres transmitidos , o un valor negativo si se produjo un error de salida o de codificación. C11dr §7.21.6.3 3 (el subrayado es mío)

En caso de éxito, el número transmitida se devuelve. stdout es típicamente tamponada, por lo que el número de caracteres impresos no puede considerarse realizada o fallan hasta más tarde.

Cuando int printf() tiene problemas, por diversas razones, devuelve un número negativo. El número de caracteres transmitidos no se conoce.

Si se produce un éxito tras fflush(stdout), entonces el valor no negativo de printf() es sin duda el número impresa.

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 la "impresión" de un '\n' normalmente vuelca stdout, pero no se especifica incluso esa acción.
What are the rules of automatic flushing stdout buffer in C?