Чому в C та C ++ існують граграфи?


76

Сьогодні я довідався, що в 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:>;
    %>
%>

Моє запитання: чому вони існують?


5
Підтвердити мій переклад? %: є #, а <%%> - {}, а <::> - []. Це правильно?
abelenky

6
Справжня відповідь: оскільки IBM була голосною і наполягала нав'язувати це всім.

1
Голосування за відновлення. Це питання є більш конкретним, ніж це (лише про andта or). Цей поставлений у більш корисній формі і має більше голосів за. Змінити: замість цього має бути копією: stackoverflow.com/questions/1234582/… .
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

1
Справжня відповідь: Отже, ви можете написати затуманений код:-)
MD XF

Відповіді:


68

Графіки були створені для програмістів, які не мали клавіатури, що підтримувала набір символів ISO 646.

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


2
Нещодавно я знайшов цю статтю , де сказано, що диграфи в мові Pascal мають корінь не в обмеженнях клавіатури, а в обмеженнях представлення символів перфокарт. І так, Паскаль - це не C і не C ++, але я думав, вам це може бути цікаво.
qqbenq

1
Клавіатури, що не належать до ASCII, не були проблемою. Звичайно, це виглядало дивно, але ... main (int argc, char * argvÄÅ) ä printf ("HelloÖn"); å
robinr

25

Я вважаю , що їх існування можна простежити до можливості , що де - то, хто - то використовує компілятор з операційною системою , чий набір символів настільки архаїчно , що не обов'язково все символи, C або C ++ необхідно , щоб висловити весь мову .

Крім того, це робить хороші записи в IOCCC .


6
Не обов’язково компілятор, Грег. Деякі набори символів EBCDIC мейнфрейма не мають узгоджених символів для квадратних дужок, що швидше заповнює обробку масиву. Це обмеження редактора та / або емулятора терміналу більше, ніж сам компілятор.
paxdiablo

Я насправді не мав на увазі, що це лише компілятор. Я редагував, щоб уточнити.
Greg Hewgill

Ні, це не має нічого спільного з EBCDIC. Ці послідовності були заради скандинавів, які використовували деякі символи ASCII як мовні символи (тому символи були різними на клавішах клавіш та на виході).
Jim Balter

5
Згадка про IOCCC додала для мене значущого значення цій відповіді.
Weston,

15

Я думаю, це тому, що деякі клавіатури на цій планеті можуть не мати таких клавіш, як "#" та "{".


10

Диграфи та триграфи в 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 графічних точок коду, багато з них були пропущені. Крім того, X3.4 координувався з іншими національними інститутами стандартів (GBR, GER, ITA тощо), а в X3.4 були кодові пункти, які позначалися як національні символи заміни - найочевидніший приклад - # для британського фунта символ (очевидний, оскільки ім'я символу # - "знак фунта", що є загальноприйнятим у торгівлі США - до еволюції Twitter), а "{''} також були позначені як національні символи, що замінюють.

Таким чином, були введені графіки для забезпечення механізму для тих комп'ютерних систем, які не здатні представляти символи, а також для кінцевого обладнання даних, яке призначало національні символи заміни конфліктуючим кодовим точкам. Ді / три-графіки стали архаїчним артефактом обчислювальної історії (предмет, який сьогодні не викладається в інформатиці).

Вичерпний документ на цю тему можна знайти тут: http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.96.678&rep=rep1&type=pdf

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.