Для установки нажмите кнопочку Установить расширение. И это всё.

Исходный код расширения WIKI 2 регулярно проверяется специалистами Mozilla Foundation, Google и Apple. Вы также можете это сделать в любой момент.

4,5
Келли Слэйтон
Мои поздравления с отличным проектом... что за великолепная идея!
Александр Григорьевский
Я использую WIKI 2 каждый день
и почти забыл как выглядит оригинальная Википедия.
Статистика
На русском, статей
Улучшено за 24 ч.
Добавлено за 24 ч.
Альтернативы
Недавние
Show all languages
Что мы делаем. Каждая страница проходит через несколько сотен совершенствующих техник. Совершенно та же Википедия. Только лучше.
.
Лео
Ньютон
Яркие
Мягкие

Из Википедии — свободной энциклопедии

Триграф (в семействе языков Си) (англ. trigraph) — последовательность из трёх символов, первые два из которых — вопросительные знаки («??»), а третий указывает на значение триграфа. Триграфы обрабатываются препроцессором C/C++.

Таблица триграфов

Триграф Эквивалентный символ
??= #
??/ \
??' ^
??( [
??) ]
??! |
??< {
??> }
??- ~

Комбинация трёх вопросительных знаков («???») не является триграфом.

В реальности триграфы практически не используются. Некоторые компиляторы (например, gcc) даже выдают предупреждение при обработке триграфов.

История

Причина появления триграфов заключается в том, что семибитная кодовая страница ISO/IEC 646, принятая в 1972 году и основанная на ASCII, отводила позиции символов «#$@[\]^`{|}~» под национальные символы (дополнительные буквы и символы валют). Например, код { a[i]='\n'; } немцы могли видеть как ä aÄiÜ='Ön'; ü. Для замены отсутствующих скобок и были введены триграфы.

В Паскале с этой же целью используются диграфы: (. .) (* *) вместо [] {}.

В стандарте C++17 триграфы отменены[1][2]. Обещают отменить и в Си23.

Примеры неожиданного поведения

Далее приведены примеры использования триграфа «??/», заменяемого на символ «\». Символ «\» является экранирующим для символа перевода строки.

// Will the next line be executed????????????????/
a++;

После замены «??/» на «\» код a++; во 2-й строке будет считаться продолжением комментария, начатого в 1-й строке.

/??/
 * A comment *??/
 /

После замены «??/» на «\» указанный код будет эквивалентен коду

/* A comment */

Пример программы

??=include <stdio.h>                         /* #          */

int main(void)
??<                                          /* {          */
        char n??(5??);                       /* [ and ]    */

        n??(4??) = '0' - (??-0 ??' 1 ??! 2); /* ~, ^ and | */
        printf("%c??/n", n??(4??));          /* ??/ = \    */
        return 0;
??>

См. также

Примечания

  1. «Removing trigraphs??! Архивная копия от 9 июля 2018 на Wayback Machine», N3981, Richard Smith, 2014-05-06; [1] Архивная копия от 8 сентября 2017 на Wayback Machine
  2. OpenNews: Утверждён стандарт C++17. opennet.ru. Дата обращения: 7 сентября 2017. Архивировано 8 сентября 2017 года.
Эта страница в последний раз была отредактирована 19 декабря 2022 в 12:41.
Как только страница обновилась в Википедии она обновляется в Вики 2.
Обычно почти сразу, изредка в течении часа.
Основа этой страницы находится в Википедии. Текст доступен по лицензии CC BY-SA 3.0 Unported License. Нетекстовые медиаданные доступны под собственными лицензиями. Wikipedia® — зарегистрированный товарный знак организации Wikimedia Foundation, Inc. WIKI 2 является независимой компанией и не аффилирована с Фондом Викимедиа (Wikimedia Foundation).