7

另一个问题,什么是垂直标签?, 描述了垂直制表符最初的用途。

但是,为什么在 C 和许多其他编程语言中首先被U+000B VERTICAL TAB认为足够重要以分配转义序列 ( ) 呢?'\v'

另见:有人抱怨这个

4

2 回答 2

9

正确答案:TELETYPE

它与分隔符有关。我的父母从事大数据工作,许多广播公司和财富 500 强公司直到 80 年代仍在使用打孔卡。请记住,大多数语言最初设计用于在电传打字机上输入和使用,而不是在屏幕上。打印机不仅像今天这样用于打印文档。根本没有监视器。打印出来的是显示器。

考虑到这一点,垂直标签非常有用。即使是电传后,我的父母也使用它们通过仅覆盖更改的部分来更快地呈现表单。因为当时即使是纯文本显示也太慢了!

有趣的视频:https ://www.youtube.com/watch?v=qv5b1Xowxdk

但更重要的是:现代操作系统中的很多很多东西都是电传打字机的遗物......不仅仅是垂直标签。我们已经习惯了它们,以至于人们甚至都不再考虑它们了,但它们也同样奇怪。我敢肯定,除非他们自 70 年代以来一直在编码,否则很多人都没有意识到这些约定的来源。

  • 您是否在 80 列中对代码或电子邮件进行文本包装?
    因为 IBM 打孔卡有 80 个字符宽。

  • 您是否使用支持自下而上编码的图形,例如 Windows 位图,或任何原点位于下角的图形库?
    因为电传打字机是从下往上滚动的。

  • 您是否使用 \n 表示新的文本行?
    因为 \n 代表换行,它在用于电传打字机之前来自手动打字机。

  • 你有没有在 Linux 下通过写信到 /dev/tty 给朋友发消息?
    因为 TTY 是电传打字机的缩写。

  • 你有没有告诉别人使用现有的库而不是重新发明轮子?您自己使用过库或框架吗?
    因为这就是旧代码的存在方式。当然,利大于弊,但是建立在库之上的库会导致这种蔓延的依赖性,即使原始库早已不复存在,与它兼容的所有内容都会导致其约定继续存在………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………

这些电传打字约定在操作系统本身中根深蒂固,我完全希望这将一直存在,直到有人从头开始编写操作系统,即使那样我也不太确定。毫无疑问,为什么 C 语言选择了它们。请记住,C 出现在 LISP、Forth、COBOL、FORTRAN、Pascal 甚至 BASIC 之后很久。

PS 使用响铃字符作为分隔符将是一件疯狂的事情。磨 磨 磨 BEEP 磨 BEEEEEEP 磨 chuka chuka BEEP 磨 chuka 磨 磨 BEEEP。嗖嗖声。磨磨哔哔...

于 2015-01-08T03:31:54.607 回答
2

有可能在创建 C 时,人们期望垂直制表符和钟形字符作为代码中的分隔符足够有用,这些分隔符将在 ASCII 和 EBCDIC 之间移植,代码必须提供一种可读且可移植的方式来标记它们。虽然可以写

#define QVTAB "\013"
printf("Field1" QVTAB "Field2");

我不认为这种用法在 C 的最早方言中是合法的。此外,即使允许这种用法,使用特殊宏来引用字符的版本可能会被认为有点难看。我知道这些东西最终在 printf 便携式格式说明符中是必要的,但这并不意味着它很漂亮。

另一件需要考虑的事情是,C 并非设计为人们将在未来几十年使用的编程语言。它旨在解决一些紧迫的需求。K&R 不会关心 1970 年代之后是否有人想要 VTAB 角色;如果他们的直接客户会使用他们,那将是包含他们的绝佳理由。

于 2011-09-09T21:43:51.237 回答