類似於iostream.h,conio.h,...如何在C++中查看頭文件的源代碼?
回答
標準庫一般都是模板。您可以打開所需的標題並查看它是如何實施的†。請注意,它不是<iostream.h>
,它是<iostream>
; C++標準庫沒有.h
擴展名。 C庫像<string.h>
可以作爲<cstring>
(儘管這通常只包括string.h
)
這就是說,運行時庫(的東西,如C庫,未模板的東西)進行編譯。您可以搜索您的編譯器安裝目錄,以查找運行時庫的源代碼。
爲什麼?如果只是爲了看,那麼你去。但是嘗試學習是一種可怕的方式,因爲代碼可能具有特定於編譯器的非標準擴展,並且大多數實現通常難以閱讀。
如果您有關於函數內部運作的具體問題,請隨時發起一個新問題,並詢問它是如何工作的。
†我應該提一提,您可能會有一個支持export
的編譯器。這意味着它們完全有可能編譯了模板代碼;但這是非常不可能的。應該提到完整性。
僅僅是迂腐,有標準*庫*和標準模板庫,a.k.a. STL,它是模板。例如,'fputs'在標準庫中,但可能不是模板。在C++標準中,*標準*包含文件**可能不會被實現爲文件;它們可以在編譯器的可執行文件中進行編碼。 – 2010-01-31 21:40:06
MSVC++的運行時的源代碼是可用的,所以「對於專有產品你運氣不好」只是不正確。 – MSalters 2010-02-01 12:15:28
從您添加的評論看來,您正在尋找非模板函數(或不在任何原因的頭文件中)的實現的源代碼。更傳統的運行時庫支持通常是單獨編譯的,並且存儲在鏈接到程序中的庫文件中。
大多數編譯器提供了庫的源代碼(儘管它不能保證可用),但源文件可能安裝在系統的任何位置。
因爲我已經安裝了微軟的編譯器,我能找到的目錄中運行時源的Visual Studio安裝位置下命名是這樣的:如果你使用一些其他的編譯器
vc\crt\src // VS2008
vc7\crt\src // VS2003
vc98\crt\src // VC6
,戳圍繞安裝目錄(並確保在安裝編譯器工具時要求安裝運行時源代碼)。
如前所述,它是特定於實現的,但有一種簡單的方法可以查看頭文件的內容。
只用於預處理和
gcc
啓用g++
是-E
選項編譯代碼。
這將頭文件的內容替換爲其實際內容,您可以看到它們。在Linux上,你可以找到其中的一些在
/usr/include
這些文件只包含聲明和宏觀definitions.The實際執行的源文件可以從庫提供商如C++標準庫的源代碼來獲得(libstdC++)可獲得here。
根據C++語言規範,實現者不必將標準頭文件放入物理文件中。實現者可以在翻譯器的可執行文件中對頭文件進行硬編碼。
因此,您可能無法查看標準頭文件的內容。
- 1. 如何查看totalview中的源代碼?
- 2. 如何查看jar文件中的源代碼?
- 3. 如何從代碼文檔中隱藏查看源代碼?
- 4. 搜索/查找C/C++源代碼但不是頭文件
- 5. 如何查看用C/C++編寫的函數的源代碼?
- 6. 如何查看R的源代碼
- 7. 如何查看Python的__builtins__源代碼?
- 8. 如何查看RouteValueDictionary類的源代碼
- 9. 如何查看Silverlight dll的源代碼
- 10. 如何查看dll文件的源代碼?
- 11. 如何查看Gwbasic .bas文件的源代碼?
- 12. 如何查看.mex文件的源代碼
- 13. 頭文件中的源代碼
- 14. PostgreSQL - 如何在pgAdmin中查看函數文本/源代碼?
- 15. eclipse for android c源代碼 - 如何解決編譯頭文件?
- 16. MDE文件 - 如何查看代碼
- 17. 如何用C頭文件和CUDA代碼編譯C代碼?
- 18. 如何使用cmake在源代碼中生成頭文件?
- 19. 如何查看HTML源代碼?
- 20. 如何查看源代碼Kcachegrind
- 21. 如何查看Android源代碼版本?
- 22. 在JAR文件中查看代碼
- 23. C;頭文件和代碼
- 24. 在哪裏可以在線查找C++庫頭文件的源代碼?
- 25. 如何編譯包含C源文件的C++源代碼?
- 26. 未找到源代碼:添加源代碼附件查看源代碼
- 27. 如何查看xcode中的objective-c庫頭文件
- 28. 在Mac上查看.rb文件的源代碼
- 29. 如何在android中查看應用程序的源代碼
- 30. 如何在Win8 IE10中查看網頁的html源代碼
用你最喜歡的文本編輯器打開文件? – 2010-01-31 05:18:30
cat/p/a/t/hh .. – 2010-01-31 05:19:41
C++的標準頭文件沒有完整的源代碼 – 2010-01-31 05:23:46