2011-02-01 31 views
41

Duplicar posibles:
source code of c/c++ functionsCódigo para la función printf en C

Me preguntaba donde puedo encontrar el código C que se utiliza de manera que cuando escribo printf ("Hello World! "); en mi programa C para saber que tiene que imprimir esa cadena a STDOUT. Miré en <stdio.h>, pero allí solo pude encontrar su prototipo int printf (formato const char *, ...), pero no cómo se ve internamente.

+0

¿De qué implementación? Cada plataforma tiene su propia ... – thkala

+1

No creo que haya una fuente disponible. +1 de todos modos, siempre me he preguntado esto. – BlackBear

+0

En última instancia, printf tiene que hacer una llamada al sistema operativo para que la implementación exacta sea específica de la plataforma. Seguir el rastro desde printf hasta las llamadas al sistema operativo real (s) puede ser bastante desordenado. La fuente de C-Runtime Library (CRT) generalmente está disponible con el compilador (verdadero para GCC y MSVC). – Tergiver

Respuesta

0

Según su plataforma y la implementación; una buena aplicación es el GNU C, que se puede descargar desde here

+2

No me gustaría llamarlo una buena implementación. Intente escribir un programa que agote la memoria con un bucle que llame 'malloc (10)' y luego use 'printf' ... :-) También tiene problemas de conformidad en las configuraciones regionales UTF-8. –

57

Aquí está la versión GNU de printf ... se puede ver que pasa en stdout-vfprintf:

__printf (const char *format, ...) 
{ 
    va_list arg; 
    int done; 

    va_start (arg, format); 
    done = vfprintf (stdout, format, arg); 
    va_end (arg); 

    return done; 
} 

See here.

Aquí es a link a vfprintf ... todo el formato 'magia' sucede aquí.

Lo único que es realmente "diferente" acerca de estas funciones es que usan varargs para obtener argumentos en una lista de argumentos de longitud variable. Aparte de eso, son simplemente tradicionales C. (Esto es en contraste con printf equivalente de Pascal, que se implementa con soporte específico en el compilador ... al menos estaba de vuelta en el día.)

+0

¿Dónde se encuentra este archivo en mi sistema Linux? Estoy usando RHEL. ¡Gracias! – zack

+0

@Jerry Su código objeto está en su libc. Descargue el código fuente de glibc para la fuente. – a3f