我现在正在学习C语言。在本书中,据说"编译器提供了这些库函数:' printf',' scanf' ..."。
我无法理解。这些函数是在头文件<stdio.h>
中定义的吗?
为什么本书解释了这些函数是由编译器提供的?
答案 0 :(得分:6)
printf
,scanf
以及其他标准库函数作为实现的一部分提供。
C实现由几个组件组成。编译器只是其中之一。图书馆是另一个;它由 headers (通常作为源文件提供,如stdio.h
)和某种形式的目标代码文件组成,其中包含实际实现库函数的代码。
标题stdio.h
仅声明这些函数;它不会定义它们。 printf
的声明类似于:
int printf(const char *format, ...);
printf
的定义是实际执行解析格式字符串,访问参数以及将格式化输出发送到stdout
的代码。这通常(但不一定)用C语言编写,并作为某种可链接的目标代码提供。
对于某些C实现,编译器和库由同一组织提供。对于其他人,可能会单独提供(例如MinGW将gcc编译器与Microsoft的库结合使用)。
答案 1 :(得分:5)
这些函数由标准库提供,它是预编译代码的集合,通常由编译器作者编写(但它确实不是编译器本身的一部分)。
但请注意,这些函数仅在头文件中声明。 定义驻留在已编译的源文件中。
答案 2 :(得分:1)
通过说“编译器提供这些库函数,'printf','scanf'..”,这本书的作者很草率。
符合标准的C实现在头文件中提供了这些函数的声明,并在一些简短的库中提供了这些函数的实现。编译器只是C编程环境的一个方面。
答案 3 :(得分:1)
标准库和GCC提供的这些功能包括标准C库中许多功能的内置版本。 https://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html