[英]How to view standard library functions in C++?
例如,我想查看功能toupper()
的代碼以了解其工作原理,有什么辦法嗎? 我已經搜索並打開了string.h
庫,但是沒有找到任何東西。
從嚴格的語言角度來看,您不能“看到標准函數的代碼”,因為C ++語言標准僅定義函數的原型和行為,而不是函數的實現方式。
實際上,從嚴格的語言角度來看,像toupper
這樣的標准函數甚至不必具有源代碼,因為像<string.h>
這樣的標准標頭甚至都不必是文件!
當然,在實踐中 ,您可能永遠不會遇到標准標頭不是文件的C ++實現,因為文件只是標頭的自然而簡單的實現。 這意味着實際上,對於頭文件<string.h>
,實際上您的計算機上存在一個名為“ string.h”的C ++源文件。 只要找到它並打開它。
我已經搜索並打開了
string.h
庫,但是沒有找到任何東西。
然后,您看上去距離不夠近。 提示:此文件很可能包含一個或多個其他頭文件。
請注意,如果您實際上正在尋找toupper
,則該函數始終不在<string.h>
。 在<ctype.h>
查找。 cppreference.com是一個很好的在線參考,可以告訴您哪些標頭包含哪些功能。
http://en.cppreference.com/w/c/string/byte/toupper
同樣,這並不意味着編譯器的相應頭文件直接包含該功能,而是可以直接或間接包括其他包含該功能的文件。
無論如何, 請注意在編譯器的頭文件中將看到的內容。 它通常會比您想象的要復雜得多,更重要的是,它將經常使用您不允許在自己的代碼中使用的構造。 畢竟,這些文件中的代碼是編譯器實現的內部代碼,並且編譯器具有許多您沒有的特權,例如,使用否則被禁止的標識符,例如_STD_BEGIN
。 還期望有很多完全非標准的#pragma
和其他不可移植的東西。
要記住的另一件重要事情是,您不應深入研究函數的實現來發現其功能。 在寫得不好的軟件中,即界面混亂且沒有文檔的軟件(現實世界中到處都有),不幸的是,只要您可以訪問源代碼,就必須這樣做。
但是C ++標准函數有完整的文檔記錄,並且除了某些可爭議的例外之外,還具有精心設計的接口。 研究它們在您的系統上的實現可能很有趣,並且受教育,有時甚至是調試所必需,但不要讓這種可能性使您無法學習兩種重要的軟件工程技能:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.