2011-02-01 64 views
41

可能重複:
source code of c/c++ functions代碼printf函數

我想知道在哪裏可以找到則使用的C代碼,這樣,當我寫的printf(「世界,你好! 「);在我的C程序中知道它必須將該字符串打印到STDOUT。我查看了<stdio.h>,但在那裏我只能找到它的原型int printf(const char * format,...),但沒有看到它在內部看起來如何。

+0

從哪個實現?每個平臺都有自己的... – thkala 2011-02-01 19:48:58

+1

我不認爲有可用的來源。無論如何,我總是想知道這一點。 – BlackBear 2011-02-01 19:49:22

+0

最終,printf必須進行OS調用,所以確切的實現是平臺特定的。從printf到實際的OS調用之後,可能會非常混亂。 C運行時庫(CRT)的源代碼通常可以在編譯器中使用(GCC和MSVC爲true)。 – Tergiver 2011-02-01 20:11:08

回答

0

取決於您的平臺和實施;一個很好的實現是GNU C,你可以從here

57

下載這裏是printf GNU版本...你可以看到它傳遞stdoutvfprintf

__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.

這裏的a linkvfprintf ...所有的格式「魔術」都發生在這裏。

關於這些函數的唯一真正'不同'是他們使用可變參數來獲取可變長度參數列表中的參數。除此之外,它們只是傳統的C.(這與Pascal的printf相當,它在編譯器中實現了特定的支持......至少它在當天回來了。)