Диграф (языки Си)
Диграф (в семействе языков Си) (англ. 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 )
а после замены макроса станет
"x"
Код
%: define S "%:"
S
после подстановки диграфов станет
# define S "%:"
S
а после замены макроса станет
"%:"
См. также
Примечания
- ↑ Множество символов языка Си Архивная копия от 20 января 2012 на Wayback Machine (англ.)
- ↑ Архивированная копия. Дата обращения: 18 ноября 2014. Архивировано 8 мая 2019 года.