为什么C和C ++中有二联图?

今天我学到了C99和C ++中有二字符。 以下是一个有效的程序:

%:include <stdio.h> %:ifndef BUFSIZE %:define BUFSIZE 512 %:endif void copy(char d<::>, const char s<::>, int len) <% while (len-- >= 0) <% d<:len:> = s<:len:>; %> %> 

我的问题是:他们为什么存在?

Digraphs是为没有支持ISO 646字符集的键盘的程序员而创build的。

http://en.wikipedia.org/wiki/C_trigraph

我相信他们的存在可以追溯到某个地方,某个人正在使用一个操作系统的编译器,该编译器的字符集如此陈旧以至于它不一定具有C或C ++需要expression整个语言的所有字符。

此外,它使得在IOCCC中很好的参赛作品。

我想这是因为这个星球上的一些键盘可能没有像“#”和“{”这样的键。

c / c ++中的二元字母和三字母来自CDC6000(60位),Univac 1108(36位),DECsystem 10和20系统(36位)使用的六位字符集,每个字符集使用专有的64个字符与ASA X3.4-1963(现在称为ANSI X3.4-1963“7位美国国家信息交换标准代码”)不兼容。 最新版本是ANSI X3.4-1986。 由于这些系统不能代表所有的96个graphics代码点,所以很多都被省略了。 此外,X3.4还与其他国家标准研究所(GBR,GER,ITA等)协调,X3.4中的代码点被指定为国家替代字符 – 最明显的例子是英国镑符号(显然是因为#字符的名称是美国商业中传统用法的“磅符号” – 在Twitter发展之前)和“{”}“也被指定为国家替代字符。 因此引入了有向图来为那些不能表示字符的计算机系统提供一种机制,并且也为那些将国家替代字符分配给冲突的代码点的数据terminal设备提供一种机制。 二/三图已经成为计算历史的一个古老的人为因素(这是目前计算机科学中没有教授的主题) – 关于这个问题的详尽论文可以在这里find: http : //citeseerx.ist.psu.edu/viewdoc/下载?DOI = 10.1.1.96.678&代表= REP1&types= PDF