Namespaces
Variants

Escape sequences

From cppreference.net

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

Содержание

Диапазон универсальных символьных имен

Если универсальное символьное имя соответствует кодовой точке, которая не равна 0x24 ( '$' ), 0x40 ( '@' ), и не равна 0x60 ( '`' ) и меньше 0xA0 , или является суррогатной кодовой точкой (диапазон 0xD800-0xDFFF , включительно) , или больше 0x10FFFF , т.е. не является кодовой точкой Unicode (since C23) , программа является некорректной. Другими словами, элементы базового набора символов исходного кода и управляющие символы (в диапазонах 0x0-0x1F и 0x7F-0x9F ) не могут быть выражены через универсальные символьные имена.

(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)

Универсальное символьное имя, соответствующее кодовой точке больше 0x10FFFF (что не определено в ISO/ISC 10646), может использоваться в символьных константах и строковых литералах . Такое использование не разрешено в C++20.

(начиная с 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-последовательностей