什么是libc?它包含哪些功能?我们怎样才能得到它的源代码?

Yas*_*ash 6 c standards libc standard-library libm

根据Wikipedia,有许多基于操作系统和编译器的标准C库变体.参考:http://en.wikipedia.org/wiki/C_standard_library

  1. 但我想了解在单个库中定义了在不同标头中声明的大量函数(例如:stdio.h,string.h,stdlib.h等).所有这些头文件的源代码文件是否相同,或者stdio.h,string.h等有不同的库?由于我是编程的初学者,我不知道多个源代码文件是否可以生成像可执行文件这样的单个库.如果可能,那么我可以理解libc包含所有标准头文件的定义.我在哪里可以看到标准C库的源代码?

  2. 它是静态库还是动态库?如果我的环境(OS/IDE)中存在两个版本,当我在源代码中包含任何标准头文件时,会将其链接起来.它依赖于IDE吗?但是对于gcc,程序员没有明确地包含libc.

  3. libc是标准C库的标准名称吗?

  4. 在Windows操作系统/环境中它是否已经存在?如果它存在,它的名称是什么(仅限libc)?

  5. 还有像libm这样的其他标准C库吗?

Dev*_*lar 5

  1. 一般来说,头文件(.h)包含函数和变量的声明。实现文件 (.c) 包含所声明函数的实际实现。由于可以将多个实现文件翻译并链接到单个库二进制文件中,因此您可以拥有一个具有多个标头的库。许多 C 库实现都是开源的,您可以在其相关项目页面查看它们的源代码。GNU libcRedHat newlib是最突出的。我相信人们会在评论中添加更多内容。

  2. 实施定义。您可以将相同的源代码转换为静态或动态库。系统上同时安装这两个版本的情况并不罕见。由于几乎每个可执行文件都需要 libc,因此它通常默认添加到链接器输入中,因此您不必添加-lc到每个命令行。

  3. 不。标准 C 库的标准名称是“The Standard C Library”。请注意,实际上标准库的所有实现都使用非标准函数扩展了库。即使它们作为标准库的一部分,它们仍然是非标准的。(alloca()浮现在脑海中。)

  4. 如果我没记错的话,MSVCRT.dll 或类似的东西。

  5. libm 代表标准库的数学部分,默认情况下不会将其添加到链接器输入中,因为很少需要它。只有一个标准 C 库,即 ISO/IEC 9899 语言标准所描述的库(因此得名)。可以很容易地假定给定系统上存在许多其他库,但只有 ISO/IEC 文档中描述的才是“标准”。