是stdio.ha库吗?

Nor*_*ins 9 c libraries

C编程语言调用stdio.h一个库。但是,有人告诉我,这是一个仅适用于编译器的头文件,这是事实,因此它不是库。

Internet上的其他编程站点将其称为库。的定义现在是否有所不同?

有些C程序以#include <stdio.h>C语言开头,因为C语言不包含文件操作功能。

使用Brian Kernighan和Dennis Ritchie的The C Programming Language(第二版,第3页,引言)进行更新:

该标准的第二个重要贡献[指的是1988年完成的“ ANSI标准或” ANSI C“]是伴随C库的定义。它指定了访问操作系统的功能(例如,读取和写入)文件),格式化的输入和输出,内存分配,字符串操作等。使用此库与主机系统进行交互的程序可确保兼容行为。大多数库都是基于“标准I UNIX系统的“ / O库”。该库在第一版中进行了介绍...

图书馆的定义已经发展/改变/更新似乎是合乎逻辑的结论。

Mar*_*lli 11

不,stdio.h不是库,而是头文件。处理C时的一个常见错误是将每个头文件都调用一个库,这是错误的。

C标准库是函数的集合,这些函数在头文件中声明,并且stdio.h是其中之一。该名称代表“标准输入输出”,因此在该文件中,您可以找到处理输入,输出和文件的所有函数声明。您可以在此处找到C标准库中包含的头文件列表。

库是已编译的二进制文件(或通常是二进制文件的集合),可在编译程序时将其链接以利用库提供的功能(即导出)。然后使用头文件来标识这些函数的名称和签名,以便编译器知道如何调用它们。

通常,对于小型库,单个头文件就足够了,因此对于初学者来说,很容易将头文件与库本身混淆。但是,C标准库非常复杂并且具有许多功能,因此它们在不同的头文件中声明。

#include <stdio.h>之所以使用C程序,是因为C语言不包含文件操作功能。

是的,这是正确的。C规范仅涉及语言本身(语法,类型等),并且未定义任何“标准”功能。

  • 另一种查看方法是`stdio.h` *描述了库*,以便编译器可以使用它。 (3认同)
  • 尽管有其名称,“ C标准库”不一定是单个库(单个文件)。 (2认同)
  • 不,@myradio,只有声明。这些定义位于 libc 源代码的不同 C 文件中。 (2认同)

Cal*_*leb 5

我的书“C 编程语言”调用了 stdio.ha 库。现在,我被告知它是一个仅用于编译器的“头文件”,这是真的,因此它不是一个库。

我有那本书的副本(第一版,还有 ANSI 版),我不记得对头文件和库之间的区别有任何混淆。你能告诉我们你要找的地方吗?例如,在第 152 页上,我看到:

每个引用输入/输出库函数的源文件都必须包含以下行
#include <stdio.h>

这是真的……这并不是说这stdio.h 是一个库,而是说如果你想使用这个库,你必须包含头文件。同样在第 176 页:

描述文件的数据结构包含在 中,它必须(通过#include)包含在使用标准输入/输出库中的例程的任何源文件中。它也包含在该库中的函数中......

在本段中,该库指的是“标准输入/输出库”,而不是stdio.h它本身。我可以看到有人可能会误读它,但在上下文中,这本书实际上并没有stdio.h在这里调用图书馆。

如果您可以将我们指向您正在查看的特定段落,也许我们可以更好地解释。


更新:

你从书中引用的那段话是从第二版的引言开始的,它是在谈论到那时为止的语言历史(第二版于 1988 年问世)。特别是,该段正在谈论 C 标准库:

该标准的第二个重要贡献是定义了一个伴随 C...

看起来激发您问题的部分是这样的:

...该库的大部分内容都以 UNIX 系统的“标准 1/0 库”为模型。这个库在第一版中有描述,并且也被广泛用于其他系统......

在所有情况下,当文本说library 时,它确实意味着,而不是header file。每个 C 库都有一个或多个相关的头文件,这些头文件提供了相关库的接口;如果没有头文件,您(和您的编译器)将不知道如何访问库中定义的函数。例如,fopen()函数在带有函数原型的声明stdio.h

FILE *
fopen(const char * restrict path, const char * restrict mode);
Run Code Online (Sandbox Code Playgroud)

一旦你有fopen()可用的声明,编译器就知道如何生成调用该函数的指令,链接器会将你的代码连接到库文件本身中的实际函数定义。所以当文中说到standard I/O library时,其实是在说库,同名的头文件只是一个辅助文件,可以让你访问库。

图书馆的定义已经演变/改变/更新似乎是一个合乎逻辑的结论......

不,这不是发生的事情;头文件和库一直是不同但相关的东西,自本书编写以来,其含义确实没有改变,至少就 C 而言。

  • 呃..对于初学者来说,短语*“每个引用输入/输出库的源文件”*后面紧跟着`#include &lt;stdio.h&gt;`可能会被误解为`stdio.h`是“输入/输出库”。这并不是那么难以想象。恕我直言,这可能就是发生的事情。 (2认同)