如果这是一个主观或重复的问题,我深表歉意.搜索起来有点尴尬,所以我不确定要包含哪些术语.
我想知道的是,当你不包括像stdio
和stdlib
这样的标准库时,C中的基本基础工具/函数是什么.
如果没有printf()
、fopen()
等,我该怎么办呢?
另外,从技术上讲,这些库是"C"语言的一部分,还是仅仅是非常有用和有效的必需库?
如果这是一个主观或重复的问题,我深表歉意.搜索起来有点尴尬,所以我不确定要包含哪些术语.
我想知道的是,当你不包括像stdio
和stdlib
这样的标准库时,C中的基本基础工具/函数是什么.
如果没有printf()
、fopen()
等,我该怎么办呢?
另外,从技术上讲,这些库是"C"语言的一部分,还是仅仅是非常有用和有效的必需库?
C标准是这样说的(5.1.2.3/5):
对一致性的最低要求 实施情况包括:
-在顺序点,易失性对象 在某种意义上是稳定的,即以前的 访问是完成的,并且是后续访问 尚未发生访问.
-程序终止时,所有数据
-系统的输入和输出动态
因此,如果没有标准的库函数,程序唯一能保证的行为就是与易失性对象的值有关,因为你不能使用任何保证的文件访问或"交互式设备"."纯C"仅通过标准库函数提供交互.
不过,纯C语言并不是问题的全部,因为您的硬件可能有特定的地址,这些地址在读取或写入时会执行特定的操作(无论是SATA或PCI总线、原始视频内存、串行端口、要发出蜂鸣音的东西,还是闪烁的LED).所以,knowing something about your hardware,你可以用C语言写很多东西,而不需要使用标准库函数.您可以潜在地实现C标准库,尽管这可能需要访问特殊的CPU指令和特殊的内存地址.
但是在纯C中,没有扩展,删除了标准库函数,除了读取命令行参数、做一些工作并从main
返回状态码之外,基本上不能做任何事情.这不是不屑一顾的,它仍然是受资源限制的图灵完全的,尽管你唯一的资源是自动的和静电变量,没有堆分配.它不是一个非常丰富的编程环境.
标准库是C语言规范的一部分,但在任何语言中,都会在语言"本身"和库之间划出一条线.这是一个概念上的差异,但最终在原则上并不是一个非常重要的差异,因为标准说它们是结合在一起的.任何从事非标准工作的人都可以像库一样轻松地删除语言功能.不管怎样,结果都不是C的一致性实现.
请注意,C的"独立"实现只需实现标准的子集,包括不包括任何I/O,因此您处于我上面描述的位置,依赖于特定于硬件的扩展来完成任何有趣的事情.如果您想根据标准来区分"核心语言"和"库",那么这可能是一个划清界限的好地方.