В отличие от триграфов, диграфы внутри строк в кавычках не имеют специального назначения. То есть фрагмент

Альтернативное написание: iso646.h
С помощью триграфных последовательностей операцию || можно записать как ??!??!, что не выглядит особенно изящно. Стандарт С99 через заголовочный файл iso646.h (см. табл. B.V.ll) предоставляет макросы, которые расширяются в операции. В стандарте эти макросы называются альтернативным написанием.
Если вы включите заголовочный файл iso646.h, то оператор наподобие
if(x == Ml or х == М2) х and_eq OXFF;
расширяется следующим образом:
if(х == Ml || x == М2) x &= OXFF;
Многобайтные символы
Стандарт описывает многобайтный символ как последовательность из одного или более байтов, которая представляет элемент расширенного набора символов либо
900 Приложение Б в исходной среде, либо в среде выполнения. Исходная среда — это та, где вы подготавливаете исходный код, а среда выполнения — та, в которой вы запускаете скомпилированную программу. Они могут отличаться. Например, программа может разрабатываться в одной среде с намерением запускать ее в другой. Расширенный набор символов является надмножеством базового набора символов, определенного в С.
Реализация может предоставлять расширенный набор символов, который позволяет, к примеру, вводить клавиатурные символы, не соответствующие базовому набору. Они могут применяться в строковых литералах и символьных константах, а также встречаться в файлах. Реализация также может предлагать многобайтные эквиваленты символов из базового набора, которые можно использовать вместо триграфов или диграфов.
Немецкая реализация, например, может разрешить присутствие в строках символов с умляутами:
puts("eins zwei drei vier fdnf");
В общем случае расширенный набор символов, доступный программе, зависит от локальной установки.
Универсальные имена символов (UCN)
Многобайтные символы могут применяться в строках, но не в идентификаторах. Универсальные имена символов (Universal Character Name — UCN) представляют собой дополнение С99, позволяющее использовать символы из расширенного набора в качестве части имен идентификаторов. Система расширяет концепцию управляющих последовательностей для обеспечения возможности кодирования символов из стандарта ISO/IEC 10646. Этот стандарт разработан совместно Международной организацией по стандартизации (ISO) и Международной электротехнической комиссией (IF.C), и он предоставляет числовые коды для огромного списка символов. Стандарт 10646 тесно согласован с Unicode (см. врезку ниже).
Unicode и ISO 10646
Unicode предлагает решение по представлению разнообразных наборов символов за счет предоставления стандартной системы нумерации для большого количества символов и знаков, группируя их по типам. Например, кодировка ASCII включена как подмножество Unicode, поэтому символы U.S. Latin, такие как А и Z, имеют одинаковое представление в обеих системах. Но Unicode также содержит в себе другие латинские символы вроде применяемых в европейских языках; символы из других алфавитов, в числе которых кириллический, греческий, иврит, чероки, арабский, тайский и бенгальский; а также идеограммы вроде тех, что используются в китайском и японском языках. К настоящему времени Unicode представляет свыше 110 000 символов и 100 шрифтов и все еще продолжает развиваться. За дополнительными сведениями обращайтесь на веб-сайт Консорциума Unicode по адресу www.Unicode.org.
Каждому символу в Unicode назначается число, называемое кодовым знаком. Типичная форма записи для кодовых знаков Unicode выглядит так: U-222B. Наличие U идентифицирует последовательность как символ Unicode, а 222В — это шестнадцатеричное число для символа, в данном случае знака интеграла.
Международная организация по стандартизации (ISO) организовала рабочую группу для создания ISO 10646, который также является стандартом для кодирования многоязычного текста. Группа ISO 10646 и группа Unicode работают вместе с 1991 года, поддерживая свои стандарты в согласованном состоянии.
Справочные материалы 901
Существуют две формы последовательностей UCN. Первая имеет вид \uhexquad, где hexquad — последовательность из четырех шестнадцатеричных цифр; например, \u00F6. Вторая форма записывается как \Uhexquadhexquad, например, \U0000AC01. Поскольку каждая шестнадцатеричная цифра соответствует четырем битам, форма \и может применяться для кодов, представимых 16-битовым целым числом, a \U — для кодов, представимых 32-битовым целым числом.
Читать дальше