我目前正在学习C.我知道很多常见的功能,例如printf
和scanf
实际上并不是C语言的一部分 - 它们是"标准库的一部分&# 34;功能。
我的问题是,为什么这些功能没有内置到语言中?这是一个哲学/设计考虑因素吗?编译程序时的效率问题?为了充当中间层的必要性"确保与不同操作系统的兼容性?还有其他什么呢?
答案 0 :(得分:5)
是 C的一部分.C实现由编译器和库(以及其他组件,如链接器)组成。
C core 语言包括可以编写可供其他程序使用的库代码的工具。标准的标准库部分指定了一个可以使用核心语言中定义的工具实现的库。
某些语言的内容类似于语言中内置的print
命令。 C编写和调用用C语言编写的库代码的工具足够强大,以至于没有必要。
此外,大多数库都是可选,用于"独立式"实现(主要用于嵌入式系统)。有些实现支持完整的核心语言,但不能提供大多数C标准库。
可以单独提供编译器和库。例如,gcc是一个编译器;它通常用于不同系统上的不同库实现(Linux上的GNU libc,#34; newlib"在Cygwin上,Windows上的Microsoft库与MinGW,等等)。如果将库集成到核心语言中,那么混合和匹配会更加困难。
C language standard(链接是最新的免费草案)定义C.第6节定义核心语言;第7节定义了标准库。
答案 1 :(得分:2)
问题是标准允许两种符合实现:托管和freestading,参见N1570 4 / p6:
托管和支持两种形式的符合实现 独立。符合的托管实现应接受任何 严格遵守计划。符合的独立实施 应接受任何不使用复杂的严格符合的程序 类型以及使用库中指定的功能 子句(第7条)仅限于标准标题的内容
<float.h>
,<iso646.h>
,<limits.h>
,<stdalign.h>
,<stdarg.h>
,<stdbool.h>
,<stddef.h>
,<stdint.h>
和<stdnoreturn.h>
。符合要求的实施可能有 扩展(包括其他库函数),只要它们可以 不改变任何严格符合程序的行为。
通过这样的设计,图书馆被组织为标准标题,它可以简单地“切断”#34;如果不支持,可以使用一些标题。
请注意,C标准定义了标准C库的所有标题以及函数。它确实包含在C标准中,而不是其他地方的单独内容。
答案 2 :(得分:2)
他们是语言的一部分,他们不是语法的一部分。
将I / O分解到单独的函数库中可以获得以下内容: