Q为什么C语言中这些都没有标准化?任何实际的程序都需要做其中一些事情。
A实际上,随着时间的推移,已经发生了一些标准化。起初,C语言根本没有标准库;程序员总是不得不“自己编写”实用程序例程。在几次失败的尝试之后,一套特定的库例程(包括str*和stdio例程系列)成为了事实上的标准,至少在Unix系统上如此,但该库还不是语言的正式组成部分。供应商可以(并且偶尔也这样做)提供与他们的编译器完全不同的例程。
在ANSI/ISO标准C中,采用了一个库定义(基于1984年的/usr/group标准,并且在很大程度上兼容传统的Unix库),其地位与语言本身同等重要。然而,标准C库对文件和设备I/O的处理相当有限。它说明了如何将字符流写入和读取文件,并对诸如\b, \r,而\t之类的控制字符的显示行为提供了一些建议,但除此之外,它保持沉默。(然而,其中许多问题在Posix中得到了解决和标准化。)
如果标准试图定义访问键盘和显示器等事物的标准机制,这对程序员来说似乎是一个很大的便利。但这将是一项艰巨的任务:显示设备已经存在巨大的差异,并且访问它们的操作系统之间也存在巨大的差异。我们不能假设未来的几年里会提供任何更少的差异。
曾经,C程序常用的输出设备是电传打字机;后来是“哑巴”终端,之后是“聪明”的VT100或其他ANSI X3.64兼容终端,这些终端如今可能被称为“哑巴”。如今,很可能是位图彩色显示屏。五年后会是什么?当时的操作系统将如何处理它的功能?
另请参阅问题11.34。
参考文献:Rationale第2.2.2节、第4.9节、第4.9.2节