我今天学习了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:>; %> %>
我的问题是:它们为什么存在?
lnxxn5zx1#
有向图是为没有支持ISO 646字符集的键盘的程序员创建的。http://en.wikipedia.org/wiki/C_trigraph
ttp71kqs2#
我相信它们的存在可以追溯到某个地方的可能性,有人正在使用一个操作系统的编译器,其字符集是如此古老,以至于它不一定具有C或C++表达整个语言所需的所有字符。此外,它也是IOCCC中的好条目。
bvuwiixz3#
我想这是因为这个星球上的一些键盘可能没有像“#”和“|”这样的键。
r9f1avp54#
C/C++中的有向图和三向图来自CDC 6000使用六位字符集的时代(60位),Univac 1108(36位),DEC系统10和20系统(36位),每个都使用与阿萨X3.4-1963不兼容的专有64字符集(现在称为ANSI X3.4-1963“7位美国国家信息交换标准代码”)。最新修订版是ANSI X3.4-1986。由于这些系统不能表示所有的96个图形代码点,许多被省略了。另外,X3.4与其他国家标准研究所协调(英国、格尔、意大利、等),并且在X3.4中有一些代码点被指定为国家替换字符-最明显的例子是#表示英国磅符号(很明显,因为#字符的名称是“磅符号”,这是在Twitter发展之前美国商业中的传统用法)和“{”}也被指定为国家替换字符。因此,引入了二合图,为那些不能表示字符的计算机系统提供了一种机制,也为数据终端设备分配了国家替换字符到冲突的代码点。Di/Tri-graphs已经成为计算历史上的一个古老的人工制品(这些天在计算机科学中没有教授的主题)。关于这个主题的详尽论文可以在这里找到:http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.96.678&rep=rep1&type=pdf
toiithl65#
根据维基百科上的文章,它们被创建为三字母的更简单的替代品。即,对于5个三合图??(、??)、??<、??>、??=,提供替换有向图:<:,:>,<%,%>,%:。这发生在1994年。
??(
??)
??<
??>
??=
<:
:>
<%
%>
%:
5条答案
按热度按时间lnxxn5zx1#
有向图是为没有支持ISO 646字符集的键盘的程序员创建的。
http://en.wikipedia.org/wiki/C_trigraph
ttp71kqs2#
我相信它们的存在可以追溯到某个地方的可能性,有人正在使用一个操作系统的编译器,其字符集是如此古老,以至于它不一定具有C或C++表达整个语言所需的所有字符。
此外,它也是IOCCC中的好条目。
bvuwiixz3#
我想这是因为这个星球上的一些键盘可能没有像“#”和“|”这样的键。
r9f1avp54#
C/C++中的有向图和三向图来自CDC 6000使用六位字符集的时代(60位),Univac 1108(36位),DEC系统10和20系统(36位),每个都使用与阿萨X3.4-1963不兼容的专有64字符集(现在称为ANSI X3.4-1963“7位美国国家信息交换标准代码”)。最新修订版是ANSI X3.4-1986。
由于这些系统不能表示所有的96个图形代码点,许多被省略了。另外,X3.4与其他国家标准研究所协调(英国、格尔、意大利、等),并且在X3.4中有一些代码点被指定为国家替换字符-最明显的例子是#表示英国磅符号(很明显,因为#字符的名称是“磅符号”,这是在Twitter发展之前美国商业中的传统用法)和“{”}也被指定为国家替换字符。
因此,引入了二合图,为那些不能表示字符的计算机系统提供了一种机制,也为数据终端设备分配了国家替换字符到冲突的代码点。Di/Tri-graphs已经成为计算历史上的一个古老的人工制品(这些天在计算机科学中没有教授的主题)。
关于这个主题的详尽论文可以在这里找到:http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.96.678&rep=rep1&type=pdf
toiithl65#
根据维基百科上的文章,它们被创建为三字母的更简单的替代品。
即,对于5个三合图
??(
、??)
、??<
、??>
、??=
,提供替换有向图:<:
,:>
,<%
,%>
,%:
。这发生在1994年。