我现在正在学习C语言.在本书中,据说"编译器提供了这些库函数:'printf','scanf'......".
我无法理解.那些函数是在头文件中定义的<stdio.h>不是吗?
为什么本书解释了这些函数是由编译器提供的?
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的库结合使用).
这些函数由标准库提供,标准库是预编译代码的集合,通常由编译器作者编写(但它确实不是编译器本身的一部分).
但请注意,这些函数仅在头文件中声明.该定义位于已编译的源文件中.