编译器是否提供以下功能:printf,scanf?

nuj*_*bes 4 c

我现在正在学习C语言.在本书中,据说"编译器提供了这些库函数:'printf','scanf'......".

我无法理解.那些函数是在头文件中定义的<stdio.h>不是吗?

为什么本书解释了这些函数是由编译器提供的?

Kei*_*son 6

printf,scanf和其他标准库函数作为实现的一部分提供.

AC实现由几个组件组成.编译器只是其中之一.图书馆是另一个; 它由标题(通常作为源文件提供stdio.h)和某种形式的目标代码组成文件其中包含实际实现库函数的代码.

标题stdio.h只声明这些函数; 它没有定义它们.宣言printf是这样的:

int printf(const char *format, ...);
Run Code Online (Sandbox Code Playgroud)

该定义的printf是实际执行解析格式字符串,访问的参数,并发送格式化输出的工作代码stdout.这通常(但不一定)用C语言编写,并作为某种可链接的目标代码提供.

对于某些C实现,编译器和库由同一组织提供.对于其他人,可能会单独提供(例如MinGW将gcc编译器与Microsoft的库结合使用).


Aas*_*set 5

这些函数由标准库提供,标准库是预编译代码的集合,通常由编译器作者编写(但它确实不是编译器本身的一部分).

但请注意,这些函数仅在头文件中声明.该定义位于已编译的源文件中.

  • @nujabes:头文件只包含*prototypes*,这是编译文件所需要的全部内容; 实际的实现通常已经在一些静态或动态库中编译.这样就无需在每次构建程序时重新编译整个标准库. (4认同)
  • @nujabes:因为头文件不包含实现函数的代码.实现对象文件位于标准库中; 标题只是声明为您定义的函数. (2认同)