Spec-Zone.ru › C

Последовательности экранирования

Последовательности экранирования используются для представления определенных специальных символов в строковых литералах и символьных константах.

Доступны следующие последовательности экранирования. Стандарт ISO C требует диагностики, если обратный слэш следует за любым символом, не указанным здесь:

Последовательность
экранирования
Описание Представление
Простые последовательности экранирования
\' одинарная кавычка байт 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
Числовые последовательности экранирования
\nnn произвольное восьмеричное значение код nnn
\xn... произвольное шестнадцатеричное значение код n... (произвольное количество шестнадцатеричных цифр)
Универсальные имена символов
\unnnn (с C99) значение Unicode в допустимом диапазоне;
может привести к нескольким кодовым единицам
код символа U+nnnn
\Unnnnnnnn (с C99) значение Unicode в допустимом диапазоне;
может привести к нескольким кодовым единицам
код символа U+nnnnnnnn

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

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

(с C99)

Примечания

\0 является наиболее часто используемой восьмеричной последовательностью экранирования, потому что она представляет завершающий нулевой символ в строках с нулевым завершением.

Символ новой строки \n имеет специальное значение при использовании в ввода-выводе в текстовом режиме: он преобразуется в специфичный для операционной системы байт или последовательность байтов.

Восьмеричные последовательности экранирования имеют предельную длину в три восьмеричные цифры, но завершаются первой цифрой, которая не является допустимой восьмеричной цифрой, если она встречается раньше.

Шестнадцатеричные последовательности экранирования не имеют предельной длины и завершаются первой цифрой, которая не является допустимой шестнадцатеричной цифрой. Если значение, представленное одной шестнадцатеричной последовательностью экранирования, не помещается в диапазон значений, представленных типом символа, используемым в этом строковом литерале или символьной константе (char, char8_t(с C23), char16_t, char32_t(с C11), или wchar_t), результат является неопределенным.

Универсальное имя символа в узкой строке литерала или 16-битный строковый литерал(с C11) может отображаться более чем в одной кодовой единице, например, \U0001f34c - это 4 кодовые единицы char в UTF-8 (\xF0\x9F\x8D\x8C) и 2 кодовые единицы char16_t в UTF-16 (\xD83C\xDF4C)(с C11).

(с C99)

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

(с C99)
(до C23)

Последовательность экранирования с символом вопроса \? используется для предотвращения интерпретации триграфов в строковых литералах: строка, например, "??/" компилируется как "\", но если второй знак вопроса экранирован, как в "?\?/", он становится "??/"

(до 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 Символьные константы

См. также

  • Таблица ASCII
Документация C++ для Последовательности экранирования

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/c/language/escape

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API