Warum gibt es in C und C ++ Digraphen?


76

Ich habe heute erfahren, dass es in C99 und C ++ Digraphen gibt. Folgendes ist ein gültiges Programm:

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

Meine Frage ist: Warum existieren sie?


5
Meine Übersetzung überprüfen? %: ist # und <%%> ist {} und <:::> ist []. Ist das richtig?
Abelenky

6
Die eigentliche Antwort: Weil IBM laut war und darauf bestand, es allen aufzuzwingen.

1
Abstimmung zur Wiedereröffnung. Diese Frage ist spezifischer als diese (nur über andund or). Dieser ist auf einer nützlicheren Form gestellt und hat mehr positive Stimmen. Bearbeiten: sollte stattdessen ein Duplikat von: stackoverflow.com/questions/1234582/… sein .
Ciro Santilli 法轮功 冠状 病 六四 事件 9

1
Die wahre Antwort: So können Sie verschleierten Code schreiben:-)
MD XF

Antworten:


68

Digraphen wurden für Programmierer erstellt, die keine Tastatur hatten, die den ISO 646-Zeichensatz unterstützte.

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


2
Ich habe kürzlich diesen Artikel gefunden , der besagt, dass Digraphen in Pascal nicht in Tastaturbeschränkungen, sondern in Beschränkungen für die Darstellung von Lochkartenzeichen begründet sind. Und ja, Pascal ist nicht C oder C ++, aber ich dachte, Sie finden es vielleicht interessant.
qqbenq

1
Nicht-ASCII-Tastaturen waren kein Problem. Sicher sah es seltsam aus, aber ... main (int argc, char * argvÄÅ) ä printf ("HelloÖn"); å
robinr

25

Ich glaube, dass ihre Existenz auf die Möglichkeit zurückzuführen ist, dass irgendwo jemand einen Compiler mit einem Betriebssystem verwendet, dessen Zeichensatz so archaisch ist, dass er nicht unbedingt alle Zeichen enthält, die C oder C ++ benötigen, um die gesamte Sprache auszudrücken .

Es sorgt auch für gute Einträge im IOCCC .


6
Nicht unbedingt der Compiler, Greg. Einige der EBCDIC-Zeichensätze des Mainframes enthalten keine konsistenten Zeichen für die eckigen Klammern, was die Array-Verarbeitung eher beeinträchtigt. Dies ist eine Einschränkung des Editors und / oder Terminalemulators mehr als der Compiler selbst.
Paxdiablo

Ich meinte nicht wirklich, dass es nur der Compiler war. Ich habe bearbeitet, um zu klären.
Greg Hewgill

Nein, es hat nichts mit EBCDIC zu tun. Diese Sequenzen waren für Skandinavier gedacht, die einige der ASCII-Zeichen als Sprachzeichen verwendeten (daher waren die Symbole auf den Tastenkappen und in der Ausgabe unterschiedlich).
Jim Balter

5
Die Erwähnung von IOCCC hat dieser Antwort für mich einen erheblichen Mehrwert verliehen.
Weston

15

Ich denke, das liegt daran, dass einige der Tastaturen auf diesem Planeten möglicherweise keine Tasten wie '#' und '{' haben.


10

Die Digraphen und Trigraphen in C / C ++ stammen aus den Tagen von Sechs-Bit-Zeichensätzen, die von CDC6000 (60 Bit), Univac 1108 (36 Bit), DECsystem 10 und 20 Systemen (36 Bit) verwendet wurden und jeweils proprietäre 64 Zeichen verwendeten Set nicht kompatibel mit ASA X3.4-1963 (jetzt bekannt als ANSI X3.4-1963 "7-Bit American National Standard Code für den Informationsaustausch"). Die neueste Version ist ANSI X3.4-1986.

Da diese Systeme nicht in der Lage waren, alle 96 grafischen Codepunkte darzustellen, wurden viele weggelassen. Darüber hinaus wurde X3.4 mit anderen National Standard Institutes (GBR, GER, ITA usw.) koordiniert, und in X3.4 gab es Codepunkte, die als nationale Ersatzzeichen bezeichnet wurden - das offensichtlichste Beispiel ist das # für das Britsh Pound Das Symbol (offensichtlich, weil der Name des # -Zeichens "Pfundzeichen" aus seiner herkömmlichen Verwendung im US-Handel ist - vor der Entwicklung von Twitter) und das "{''} 'wurden auch als nationale Ersatzzeichen bezeichnet.

Daher wurden Digraphen eingeführt, um einen Mechanismus für jene Computersysteme bereitzustellen, die nicht in der Lage sind, die Zeichen darzustellen, und auch für Datenendgeräte, die den widersprüchlichen Codepunkten nationale Ersatzzeichen zuweisen. Di / Tri-Graphen sind zu einem archaischen Artefakt der Computergeschichte geworden (ein Fach, das heutzutage in der Informatik nicht unterrichtet wird).

Ein ausführliches Dokument zu diesem Thema finden Sie hier: http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.96.678&rep=rep1&type=pdf

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.