有人能說我在哪裏可以找到源文件標準庫的定義在哪裏?
例如,文件string.c
在哪裏包含string.h
中原型函數的定義?最重要的是,它存在嗎?庫定義位於何處?
庫定義位於何處?
回答
其全部處於壓縮狀態,其中一些可能由asm優化。您需要查找編譯器的源以查看定義
它不是全部處於編譯狀態。考慮'字符串' –
@John Dibling,同意!我的意思是C函數 – triclosan
對於開源的GCC,您可以從其鏡像站點here下載libstdC++庫的源代碼。包含在下載中的是std庫的來源。請記住,不同的供應商會有不同的實現,所以提供的鏈接僅僅是GCC的開發人員如何決定實現標準庫。
您可能不會喜歡這個。
C++標準沒有具體說明標準庫中的任何東西實際上是在哪裏實現的。它說那裏的東西都宣佈,而只是它的名字的文件(S),您必須把名字在#include
例如,標準說這種程度:
std::string
是typedef
爲basic_string<...>
,並且爲了將typedef
加入到您的程序中,您必須#include <string>
。它實際上並沒有說basic_string
或string
是在<string>
中定義的,但它並沒有說在你的硬盤上<string>
的位置。事實上,它在現實世界中通常不在<string>
中。在我的實現,(MSVC10)string
在不同的文件中,定義,它看起來像這樣:
typedef basic_string<char, char_traits<char>, allocator<char> >
string;
有用的,是吧?
還有另一個方面。標準庫中的很多東西都是模板材料,比如string
,所以由於模板在C++中的工作方式,這些工具必須是所謂的「包含庫」。但並非標準庫中的所有內容都由模板組成。
考慮sprintf
。該標準說這個聲明是由#include <cstdio>
提供的,但是,就像string
甚至沒有聲明。而sprintf
不是模板的東西。該實現在通常稱爲CRT的C運行時庫中實現。這是一個DLLs和LIBs(MSVC10,無論如何)的集合,您的程序鏈接到運行代碼如sprintf
。
現在壞消息是那些在CRT中的組件通常沒有源代碼。你不知道sprintf
在哪裏實現,你不能看源代碼。在這些情況下,您只剩下一個替代方案,除了使用MicroSoft工作以外,您可以查看源代碼。 :)
在5年前(甚至10年)的互聯網上,有一個CRT的源代碼(實際上是整個Windows)。但我個人會看GNU,uclibc等......有些東西告訴我,看MS的sprintf實現無論如何是沒用的。 – 2011-12-01 15:49:42
- 1. 本地存儲庫位於何處?
- 2. 材料平面按鈕上定義的紋波位於何處
- 3. time.py位於何處?
- 4. -ConfigurationTypeName位於何處?
- 5. tomcat.conf位於何處?
- 6. mstest.exe位於何處?
- 7. DB.php位於何處?
- 8. 位於weblogic中的weblogic.management.internal.EncrypedData位於何處?
- 9. 位於django的LOGIN_REDIRECT_URL位於何處?
- 10. EAR文件位於何處?
- 11. Unity IAP包位於何處?
- 12. $ this-> getPriceHtml()位於何處?
- 13. NESL Microsoft.Silverlight.Windows.dll位於何處?
- 14. windows cls.exe位於何處?
- 15. parseInt()和parseFloat()位於何處?
- 16. 緩衝區位於何處?
- 17. 站點配置數據存儲庫位於何處?
- 18. MVC4腳手架數據庫位於何處?
- 19. 數據庫遷移在Node.js項目中位於何處?
- 20. WP7:SQLite數據庫文件位於何處?
- 21. 定義新存儲庫位置的URL
- 22. 處理在WPF自定義控件庫
- 23. 錯誤處理Symfony自定義庫
- 24. .gdbinit位於何處,如何編輯它?
- 25. 位於Mac或Mac OS X的localhost文件夾位於何處?
- 26. 位於mongo驅動程序類中的Query.Eq位於何處?
- 27. 位於kubernetes節點上的NFS卷位於何處?
- 28. 位於ASP.NET MVC的Razor View Engine的源代碼位於何處?
- 29. 位於Visual Studio 2013中的cdb.exe位於何處?
- 30. 位於Load Data Infile的文件位於何處?
這取決於你的編譯器。 – Abyx
http://ftp.gnu.org/gnu/libc/ – nmichaels
glibc源代碼位於http://sourceware.org/git/?p=glibc.git – pmg