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

时间:2015-08-14 00:26:18

标签: c

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

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

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

4 个答案:

答案 0 :(得分:6)

printfscanf以及其他标准库函数作为实现的一部分提供。

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