比如我想看函数toupper()
的代码,了解它是如何工作的,有什么办法吗?我搜索并打开了 string.h
库,但没有找到任何东西。
最佳答案
从严格的语言角度来看,您无法“看到”标准函数的代码,因为 C++ 语言标准只定义了函数的原型(prototype)和行为,而没有定义它们的实现方式。
其实从严格的语言角度来看,像toupper
这样的标准函数甚至不需要源代码,因为有一个标准的头文件,比如 <string.h>
甚至不必是文件!
当然,在实践中,您可能永远不会遇到标准头文件不是文件的C++实现,因为文件只是头文件的自然而简单的实现。这意味着在实践中,对于标题 <string.h>
,实际上在您的计算机上某处有一个名为“string.h”的 C++ 源文件。 只需找到并打开即可。
I have searched and opened
string.h
library, but didn't find anything.
那你还不够仔细。提示:该文件很可能包含一个或多个其他头文件。
请注意,如果您实际查找了 toupper
, 该函数不在 <string.h>
中反正。找<ctype.h>
反而。 cppreference.com 是一个很好的在线引用,可以告诉您哪些 header 包含哪些函数。
http://en.cppreference.com/w/c/string/byte/toupper
同样,这并不意味着您的编译器的相应头文件直接包含该函数,而是可能直接或间接包含包含该函数的其他文件。
无论如何,注意您将在编译器的头文件中看到的内容。它通常比您想象的要复杂得多,而且更重要的是,它经常会使用不允许在您自己的代码中使用的结构;毕竟,这些文件中的代码是编译器实现的内部代码,并且编译器有很多你没有的特权,例如使用其他禁止的标识符,如 _STD_BEGIN
。 .还期待很多完全不标准的#pragma
s 和其他不可携带的东西。
另一件需要牢记的重要事情是,您不应该深入研究函数的实现来了解它的作用。在编写糟糕的软件中,即界面困惑且没有文档的软件(在现实世界中随处可见),不幸的是,如果您可以访问源代码,您就必须这样做。
但 C++ 标准函数有完善的文档记录,并且除了一些有争议的异常(exception)情况外,还具有设计良好的接口(interface)。查看它们在您的系统上的实现可能很有趣,也很有教育意义,有时甚至是调试所必需的,但不要让这种可能性阻止您学习两项重要的软件工程技能:
- 阅读文档。
- 针对接口(interface)而非实现进行编程。
关于c++ - 如何查看C++中的标准库函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31626364/