繁体   English   中英

库定义在哪里?

[英]Where are Library definitions located?

有人可以说我在哪里可以找到源文件,标准库的定义在哪里?
例如,包含string.h原型函数的定义的文件string.c在哪里? 最重要的是,它存在吗?

它全部处于编译状态,有些可能已通过asm优化。 您需要找到编译器的源才能查看定义

对于GCC,这是开源的,你可以从他们的镜像站点下载的的libstdc ++库源在这里 下载中包括了std库的源代码。 请记住,不同的供应商将有不同的实现,因此提供的链接仅仅是GCC的开发人员决定实现标准库的方式

您可能不会喜欢这样。

C ++标准并未具体说明标准库中实际执行的位置。 它说明了声明的位置 ,但仅以它为文件命名的程度,您必须#include才能引入名称。例如,标准说:

std::string

basic_string<...>typedef ,并且为了将该typedef引入程序,您必须#include <string> 它实际上并没有说basic_stringstring是在<string>中定义的,并且也没有说<string>在硬盘上的位置。 实际上,在现实世界中通常不在<string>中。 在我的实现中,(MSVC10) string是在另一个文件<xstring> ,它看起来像这样:

typedef basic_string<char, char_traits<char>, allocator<char> >
    string;

有用吧?

还有另一方面。 标准库中的许多内容都是模板内容,例如string ,因此,由于模板在C ++中的工作方式,这些功能必须称为“包含库”。 但并不是标准库中的所有内容都由模板组成。

考虑sprintf 标准说,该声明是由#include <cstdio>提供的,但是,即使string在声明的地方也一样。 sprintf不是模板。 该实现在通常称为CRT的C运行库中。 这是DLL和LIB的集合(无论如何在MSVC10中),您的程序链接到这些DLL和LIB来运行sprintf代码。

现在的坏消息是,CRT中的那些组件通常出厂时都没有源代码。 您不知道sprintf的实现位置,也看不到源代码。 在这些情况下,除了找到MicroSoft的工作之外,您别无选择,因此您可以看一下源代码。 :)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM