如果这是一个主观的或重复的问题,我深表歉意。搜索有点尴尬,所以我不确定要包括哪些术语。
我想知道的是,当您不包括stdio
和stdlib
这样的标准库时,C中的基本基础工具/功能是什么。
如果没有printf()
,fopen()
等,该怎么办?
而且,这些库从技术上讲是“C”语言的一部分,还是只是非常有用且有效的基本库?
最佳答案
C标准的说法是(5.1.2.3/5):
因此,如果没有标准库功能,则保证程序的唯一行为与易失对象的值有关,因为您不能使用任何保证的文件访问或“交互设备”。 “纯C”仅通过标准库函数提供交互。
但是,纯C并不是全部内容,因为您的硬件可以具有某些地址,这些地址在读取或写入时会做某些事情(无论是SATA或PCI总线,原始视频内存,串行端口,发出哔哔声还是LED闪烁)。因此,了解您的硬件知识之后,就可以使用C进行大量编写工作,而无需使用标准库函数。可能可以实现C标准库,尽管这可能需要访问特殊的CPU指令以及特殊的内存地址。
但是,在没有扩展名的纯C语言中,并且删除了标准库函数,除了读取命令行参数,执行某些工作以及从main
返回状态代码之外,您基本上不能做任何其他事情。这是不容置疑的,尽管资源仅是自动和静态变量,没有堆分配,但它仍然受资源限制而仍在图灵上。这不是一个非常丰富的编程环境。
标准库是C语言规范的一部分,但是在任何语言中,“如此”的语言与库之间的界限似乎都是很明显的。这是一个概念上的差异,但最终在原则上并不是一个非常重要的差异,因为该标准指出它们是一起出现的。任何做非标准操作的人都可以像删除库一样轻松地删除语言功能。无论哪种方式,结果都不是符合C的实现。
请注意,C的“独立”实现只需实现不包括任何I / O的标准子集,因此您处于上述位置,依靠特定于硬件的扩展来完成任何有趣的事情。如果您想根据标准在“核心语言”和“库”之间进行区分,那么这可能是个好地方。