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