web-dev-qa-db-ja.com

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:>;
    %>
%>

私の質問は:なぜそれらが存在するのですか?

70
Sydius

有向グラフは、ISO646文字セットをサポートするキーボードを持っていないプログラマーのために作成されました。

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

59
CTT

それらの存在は、可能性にまでさかのぼることができると思います。どこかで、誰かが、文字セットが非常に古風なオペレーティングシステムでコンパイラを使用しているためです。 CまたはC++が言語全体を表現するために必要なすべての文字を必ずしも持っているわけではありません。

また、 [〜#〜] ioccc [〜#〜] に適切なエントリを作成します。

24
Greg Hewgill

この惑星の一部のキーボードには「#」や「{」などのキーがない可能性があるためだと思います。

12
ChrisW

C/c ++のダイグラフとトリグラフは、CDC6000(60ビット)、Univac 1108(36ビット)、DECsystem 10および20システム(36ビット)で使用されていた6ビットの文字セットの時代のもので、それぞれ独自の64文字を使用していました。セットはASAX3.4-1963と互換性がありません(現在はANSI X3.4-1963「情報交換のための7ビット米国規格コード」として知られています)。最新のリビジョンはANSIX3.4-1986です。これらのシステムは96個のグラフィカルコードポイントすべてを表すことができなかったため、多くは省略されました。さらに、X3.4は他のNational Standard Institute(GBR、GER、ITAなど)と調整されており、X3.4には国の置換文字として指定されたコードポイントがありました。最も明白な例は、ブリティッシュポンドの#です。記号(#文字の名前は、Twitterが進化する前の、米国の商取引での従来の使用法から「ポンド記号」であるため明らかです)および「{」「}」も国の代替文字として指定されました。したがって、文字を表すことができないコンピュータシステム、および競合するコードポイントに国の置換文字を割り当てたデータ端末装置にメカニズムを提供するために、有向グラフが導入されました。 Di/Tri-graphsは、コンピューティングの歴史の古風なアーティファクトになっています(最近のコンピューターサイエンスでは教えられていない主題)-この主題に関する徹底的な論文はここにあります: http://citeseerx.ist.psu。 edu/viewdoc/download?doi = 10.1.1.96.678&rep = rep1&type = pdf

6
JTM