7

根据 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 库?

4

1 回答 1

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

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

  3. 不,标准 C 库的标准名称是“标准 C 库”。请注意,几乎所有标准库的实现都使用非标准函数扩展了该库。这些仍然是非标准的,即使它们是标准库的一部分。(alloca()突然想到。)

  4. MSVCRT.dll 之类的,如果我没记错的话。

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

于 2013-12-05T09:53:56.843 回答