2010-01-31 68 views

回答

6

標準庫一般都是模板。您可以打開所需的標題並查看它是如何實施的。請注意,它不是<iostream.h>,它是<iostream>; C++標準庫沒有.h擴展名。 C庫像<string.h>可以作爲<cstring>(儘管這通常只包括string.h

這就是說,運行時庫(的東西,如C庫,未模板的東西)進行編譯。您可以搜索您的編譯器安裝目錄,以查找運行時庫的源代碼。

爲什麼?如果只是爲了看,那麼你去。但是嘗試學習是一種可怕的方式,因爲代碼可能具有特定於編譯器的非標準擴展,並且大多數實現通常難以閱讀。

如果您有關於函數內部運作的具體問題,請隨時發起一個新問題,並詢問它是如何工作的。

†我應該提一提,您可能會有一個支持export的編譯器。這意味着它們完全有可能編譯了模板代碼;但這是非常不可能的。應該提到完整性。

+0

僅僅是迂腐,有標準*庫*和標準模板庫,a.k.a. STL,它是模板。例如,'fputs'在標準庫中,但可能不是模板。在C++標準中,*標準*包含文件**可能不會被實現爲文件;它們可以在編譯器的可執行文件中進行編碼。 – 2010-01-31 21:40:06

+1

MSVC++的運行時的源代碼是可用的,所以「對於專有產品你運氣不好」只是不正確。 – MSalters 2010-02-01 12:15:28

2

從您添加的評論看來,您正在尋找非模板函數(或不在任何原因的頭文件中)的實現的源代碼。更傳統的運行時庫支持通常是單獨編譯的,並且存儲在鏈接到程序中的庫文件中。

大多數編譯器提供了庫的源代碼(儘管它不能保證可用),但源文件可能安裝在系統的任何位置。

因爲我已經安裝了微軟的編譯器,我能找到的目錄中運行時源的Visual Studio安裝位置下命名是這樣的:如果你使用一些其他的編譯器

vc\crt\src  // VS2008 
vc7\crt\src  // VS2003 
vc98\crt\src  // VC6 

,戳圍繞安裝目錄(並確保在安裝編譯器工具時要求安裝運行時源代碼)。

1

如前所述,它是特定於實現的,但有一種簡單的方法可以查看頭文件的內容。

  • 只用於預處理和gcc啓用g++-E選項編譯代碼。
    這將頭文件的內容替換爲其實際內容,您可以看到它們。

  • 在Linux上,你可以找到其中的一些在/usr/include

  • 這些文件只包含聲明和宏觀definitions.The實際執行的源文件可以從庫提供商如C++標準庫的源代碼來獲得(libstdC++)可獲得here

0

根據C++語言規範,實現者不必將標準頭文件放入物理文件中。實現者可以在翻譯器的可執行文件中對頭文件進行硬編碼。

因此,您可能無法查看標準頭文件的內容。