Поиск…


замечания

Термин « литерал» обычно используется для описания последовательности символов в C-коде, который обозначает постоянное значение, например число (например, 0 ) или строку (например, "C" ). Строго говоря, стандарт использует термин константа для целочисленных констант, плавающих констант, констант перечисления и символьных констант, резервируя термин «литерал» для строковых литералов, но это не является обычным использованием.

Литералы могут иметь префиксы или суффиксы (но не оба), которые являются дополнительными символами, которые могут начинать или заканчивать литерал, чтобы изменить его тип по умолчанию или его представление.

Целочисленные литералы

Целочисленные литералы используются для обеспечения интегральных значений. Поддерживаются три числовые базы, обозначенные префиксами:

База Префикс пример
Десятичный Никто 5
восьмеричный 0 0345
шестнадцатеричный 0x или 0X 0x12AB , 0X12AB , 0x12ab , 0x12Ab

Обратите внимание, что это письмо не содержит никаких признаков, поэтому целые литералы всегда положительны. Кое-что вроде -1 рассматривается как выражение, которое имеет один целочисленный литерал ( 1 ), который отрицается с помощью a -

Тип десятичного целочисленного литерала - это первый тип данных, который может соответствовать значению от int и long . Поскольку C99, long long также поддерживается для очень больших литералов.

Тип восьмеричного или шестнадцатеричного целочисленного литерала - это первый тип данных, который может соответствовать значению от int , unsigned , long и unsigned long . Поскольку C99, long long и unsigned long long также поддерживаются для очень больших литералов.

Используя различные суффиксы, можно изменить тип литерала по умолчанию.

Суффикс объяснение
L , l long int
LL , ll (начиная с C99) long long int
U , u unsigned

Суффикс U и L / LL можно комбинировать в любом порядке и в любом случае. Ошибка дублирования суффиксов (например, предоставление двух U суффиксов), даже если они имеют разные случаи.

Строковые литералы

Строковые литералы используются для указания массивов символов. Это последовательности символов, заключенные в двойные кавычки (например, "abcd" и имеющие тип char* ).

Префикс L делает литерал широким массивом символов типа wchar_t* . Например, L"abcd" .

Начиная с C11, существуют и другие префиксы кодирования, аналогичные L :

префикс базовый тип кодирование
никто char зависит от платформы
L wchar_t зависит от платформы
u8 char UTF-8,
u char16_t обычно UTF-16
U char32_t обычно UTF-32

Для последних двух он может быть запрошен с помощью макросов функций, если кодирование является фактически соответствующей кодировкой UTF.

Литералы с плавающей точкой

Литералы с плавающей точкой используются для представления подписанных действительных чисел. Следующие суффиксы могут использоваться для указания типа литерала:

Суффикс Тип Примеры
никто double 3.1415926 -3E6
f , F float 3.1415926f 2.1E-6F
l , L long double 3.1415926L 1E126L

Чтобы использовать эти суффиксы, литерал должен быть литералом с плавающей запятой. Например, 3f является ошибкой, так как 3 является целым литералом, а 3.f или 3.0f являются правильными. Для long double рекомендуется всегда использовать капитал L для удобства чтения.

Литералы символов

Символьные литералы - это особый тип целочисленных литералов, которые используются для обозначения одного символа. Они заключены в одинарные кавычки, например 'a' и имеют тип int . Значение литерала представляет собой целочисленное значение в соответствии с набором символов машины. Они не допускают суффиксов.

Префикс L перед символьным литералом делает его широким символом типа wchar_t . Аналогично, поскольку префиксы C11 u и U делают его широкими символами типа char16_t и char32_t , соответственно.

При намеревании представлять определенные специальные символы, такие как непечатаемый символ, используются escape-последовательности. Последовательности Escape используют последовательность символов, которые переводятся на другой символ. Все escape-последовательности состоят из двух или более символов, первая из которых - обратная косая черта \ . Символы, следующие за обратной косой чертой, определяют, какой символ буквально интерпретируется как последовательность.

Escape Sequence Представленный персонаж
\b возврат на одну позицию
\f Подача формы
\n Линейный канал (новая строка)
\r Возврат каретки
\t Горизонтальная вкладка
\v Вертикальная вкладка
\\ бэкслэш
\' Одиночная кавычка
\" Двойная кавычка
\? Вопросительный знак
\nnn Октальное значение
\xnn ... Шестнадцатеричное значение
C89
Escape Sequence Представленный персонаж
\a Предупреждение (звуковой сигнал, звонок)
C99
Escape Sequence Представленный персонаж
\unnnn Имя универсального символа
\Unnnnnnnn Имя универсального символа

Универсальное имя символа - это кодовая точка Юникода. Имя универсального символа может отображаться более чем на один символ. Цифры n интерпретируются как шестнадцатеричные цифры. В зависимости от используемой кодировки UTF универсальная последовательность имен символов может приводить к тому, что кодовая точка состоит из нескольких символов, а не одного обычного char символа.

При использовании escape-последовательности линии в текстовом режиме ввода-вывода он преобразуется в байтовую или байтовую последовательность новой строки.

Для избежания триграфов используется escape-последовательность вопросительного знака. Например, ??/ скомпилирован как триграф, представляющий символ обратной косой черты '\' , но используя ?\?/ Приведет к строке "??/" .

В восьмеричной последовательности выхода может быть одна, две или три восьмеричные цифры n .



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow