Диграф (в семействе языков Си) () — последовательность из двух или более символов, интерпретируемая компилятором как один или более символов. В отличие от триграфов, подстановка диграфов препроцессором выполняется после лексического анализа и только в том случае, если диграф является отдельной лексемой.
История
Диграфы введены в язык C90 (ISO/IEC 9899:1990) дополнением «Amendment one». Дополнение «Amendment one» одобрено в 1994 году, принято в 1995 году и включено в стандарт C99 (ISO/IEC 9899:1999) в 1999 году.
Таблица диграфов C
Компилятор C поддерживает следующие пять диграфов, описанных в стандарте C99Множество символов языка Си .
Диграф Эквивалентный символ <: [ :> ] <% { %> } %: #
Таблица диграфов C++
Стандарт языка C++ называет диграфами не только последовательности из двух символов и признаёт, что такой термин некорректен.
Язык C++ поддерживает все диграфы и триграфы языка C, а также диграфы из следующей таблицы.
Диграф Эквивалентная последовательность %:%: ## and && bitor | or || xor ^ compl ~ bitand & and_eq &= or_eq |= xor_eq ^= not ! not_eq !=
Перечисленные диграфы, кроме «%:%:», доступны в языке C в виде констант #define. Константы определены в заголовочном файле «<iso646.h>», включённом в стандарт ISO C дополнением «Normative addendum 1» от 1995 года. Для сохранения совместимости с C стандарт C++ определяет пустой заголовочный файл «<ciso646>».
Примеры
Код %: define quote( x ) %: x quote( x ) после подстановки диграфов станет # define quote( x ) # x quote( x ) а после замены макроса станет "x"
Код %: define S "%:" S после подстановки диграфов станет # define S "%:" S а после замены макроса станет "%:"
См. также Триграф (языки Си) Диграф (программирование)
Примечания
Категория:Си (язык программирования) Категория:Статьи с примерами кода Си Категория:Диграфы