2011-02-01 12 views
41

Eventuali duplicati:
source code of c/c++ functionsCodice per la funzione printf in C

Mi chiedevo dove posso trovare il codice C che viene utilizzata in modo tale che quando scrivo printf ("Ciao Mondo! "); nel mio programma C per sapere che deve stampare quella stringa in STDOUT. Ho guardato in <stdio.h>, ma lì ho potuto trovare solo il suo prototipo int printf (const char * format, ...), ma non come appare internamente.

+0

Da quale implementazione? Ogni piattaforma ha il suo ... – thkala

+1

Non penso che ci sia la fonte disponibile. +1 comunque, mi sono sempre chiesto questo. – BlackBear

+0

In definitiva printf deve effettuare una chiamata al sistema operativo in modo che l'implementazione esatta sia specifica della piattaforma. Seguire la traccia da printf fino alla chiamata del sistema operativo effettivo può essere piuttosto complicata. Il sorgente per la libreria C-Runtime (CRT) è solitamente disponibile con il compilatore (true per GCC e MSVC). – Tergiver

risposta

0

A seconda della piattaforma e dell'implementazione; una buona implementazione è la GNU C che può essere scaricato da here

+2

Difficilmente lo definirei una buona implementazione. Prova a scrivere un programma che esaurisce la memoria con un ciclo chiamato 'malloc (10)', quindi usando 'printf' ... :-) Ha anche problemi di conformità nelle versioni locali di UTF-8. –

57

Ecco la versione GNU di printf ... si può vedere passando 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.

Ecco a link a vfprintf ... tutta la "magia" di formattazione accade qui.

L'unica cosa veramente "diversa" su queste funzioni è che usano vararg per ottenere argomenti in un elenco di argomenti di lunghezza variabile. Oltre a questo, sono solo tradizionali C. (Questo è in contrasto con l'equivalente printf di Pascal, che è implementato con supporto specifico nel compilatore ... almeno era di nuovo nel giorno.)

+0

Dove si trova questo file sotto il mio sistema linux. Sto usando RHEL. Grazie! – zack

+0

@Jerry Il suo codice oggetto è nella tua libc. Scarica il codice sorgente di glibc per la fonte. – a3f