У этого термина существуют и другие значения, см.
Диграф.
Диграф (в семействе языков Си) (англ. digraph) — последовательность из двух или более символов, интерпретируемая компилятором как один или более символов. В отличие от триграфов, подстановка диграфов препроцессором выполняется после лексического анализа и только в том случае, если диграф является отдельной лексемой.
История
Диграфы введены в язык C90 (ISO/IEC 9899:1990) дополнением «Amendment one». Дополнение «Amendment one» одобрено в 1994 году, принято в 1995 году и включено в стандарт C99 (ISO/IEC 9899:1999) в 1999 году.
Таблица диграфов C
Компилятор C поддерживает следующие пять диграфов, описанных в стандарте C99[1].
Диграф |
Эквивалентный символ
|
<: |
[
|
:> |
]
|
<% |
{
|
%> |
}
|
%: |
#
|
Таблица диграфов C++
Стандарт языка C++ называет диграфами не только последовательности из двух символов и признаёт[2], что такой термин некорректен.
Язык 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 )
а после замены макроса станет
Код
после подстановки диграфов станет
а после замены макроса станет
См. также
Примечания