Escape sequences
Escape-последовательности используются для представления определённых специальных символов в строковых литералах и символьных константах .
Доступны следующие escape-последовательности. ISO C требует выдачи диагностического сообщения, если обратная косая черта сопровождается любым символом, не указанным здесь:
|
Escape
sequence |
Описание | Представление |
|---|---|---|
| Простые escape-последовательности | ||
\'
|
одинарная кавычка |
байт
0x27
в ASCII кодировке
|
\"
|
двойная кавычка |
байт
0x22
в ASCII кодировке
|
\?
|
знак вопроса |
байт
0x3f
в ASCII кодировке
|
\\
|
обратная косая черта |
байт
0x5c
в ASCII кодировке
|
\a
|
звуковой сигнал |
байт
0x07
в ASCII кодировке
|
\b
|
возврат на шаг |
байт
0x08
в ASCII кодировке
|
\f
|
перевод формата - новая страница |
байт
0x0c
в ASCII кодировке
|
\n
|
перевод строки - новая строка |
байт
0x0a
в ASCII кодировке
|
\r
|
возврат каретки |
байт
0x0d
в ASCII кодировке
|
\t
|
горизонтальная табуляция |
байт
0x09
в ASCII кодировке
|
\v
|
вертикальная табуляция |
байт
0x0b
в ASCII кодировке
|
| Числовые escape-последовательности | ||
\
nnn
|
произвольное восьмеричное значение |
кодовая единица
nnn
|
\x
n...
|
произвольное шестнадцатеричное значение |
кодовая единица
n...
(произвольное количество шестнадцатеричных цифр)
|
| Универсальные символьные имена | ||
\u
nnnn
(since C99)
|
Unicode
значение в допустимом диапазоне;
может привести к нескольким кодовым единицам |
кодовая точка
U+
nnnn
|
\U
nnnnnnnn
(since C99)
|
Unicode
значение в допустимом диапазоне;
может привести к нескольким кодовым единицам |
кодовая точка
U+
nnnnnnnn
|
Диапазон универсальных символьных имен
Если универсальное символьное имя соответствует кодовой точке, которая не равна
|
(since C99) |
Примечания
\ 0 является наиболее часто используемой восьмеричной escape-последовательностью, поскольку она представляет завершающий нулевой символ в строках с нулевым завершением.
Символ новой строки \n имеет специальное значение при использовании в текстовом режиме ввода-вывода : он преобразуется в специфичную для ОС последовательность байтов перевода строки.
Восьмеричные escape-последовательности имеют ограничение длины в три восьмеричных цифры, но завершаются при первом символе, который не является допустимой восьмеричной цифрой, если он встретится раньше.
Шестнадцатеричные escape-последовательности не имеют ограничения по длине и завершаются при первом символе, который не является допустимой шестнадцатеричной цифрой. Если значение, представленное одной шестнадцатеричной escape-последовательностью, не соответствует диапазону значений, представленных типом символа, используемым в данном строковом литерале или символьной константе ( char , char8_t (since C23) , char16_t , char32_t (since C11) , или wchar_t ), результат не определён.
|
Универсальное символьное имя в узком строковом литерале или 16-битном строковом литерале (since C11) может отображаться на более чем одну кодовую единицу, например, \U0001f34c занимает 4 char кодовые единицы в UTF-8 ( \xF0\x9F\x8D\x8C ) и 2 char16_t кодовые единицы в UTF-16 ( \xD83C\xDF4C ) (since C11) . |
(since C99) |
|
Универсальное символьное имя, соответствующее кодовой точке больше
|
(начиная с C99)
(до C23) |
|
Escape-последовательность с вопросительным знаком \ ? используется для предотвращения интерпретации триграфов внутри строковых литералов: строка вида "??/" компилируется как " \" , но если второй вопросительный знак экранирован, как в "? \? /" , она становится "??/" |
(до C23) |
Пример
#include <stdio.h> int main(void) { printf("This\nis\na\ntest\n\nShe said, \"How are you?\"\n"); }
Вывод:
This is a test She said, "How are you?"
Ссылки
- Стандарт C17 (ISO/IEC 9899:2018):
-
- 5.2.2 Семантика отображения символов (стр: 18-19)
-
- 6.4.3 Универсальные символьные имена (стр: 44)
-
- 6.4.4.4 Символьные константы (стр: 48-50)
- Стандарт C11 (ISO/IEC 9899:2011):
-
- 5.2.2 Семантика отображения символов (стр: 24-25)
-
- 6.4.3 Универсальные символьные имена (стр: 61)
-
- 6.4.4.4 Символьные константы (стр: 67-70)
- Стандарт C99 (ISO/IEC 9899:1999):
-
- 5.2.2 Семантика отображения символов (стр. 19-20)
-
- 6.4.3 Универсальные символьные имена (стр. 53)
-
- 6.4.4.4 Символьные константы (стр. 59-61)
- Стандарт C89/C90 (ISO/IEC 9899:1990):
-
- 2.2.2 Семантика отображения символов
-
- 3.1.3.4 Символьные константы
Смотрите также
|
Документация C++
для
Escape-последовательностей
|