C Language
Литералы для чисел, символов и строк
Поиск…
замечания
Термин « литерал» обычно используется для описания последовательности символов в 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 ... | Шестнадцатеричное значение |
Escape Sequence | Представленный персонаж |
---|---|
\a | Предупреждение (звуковой сигнал, звонок) |
Escape Sequence | Представленный персонаж |
---|---|
\unnnn | Имя универсального символа |
\Unnnnnnnn | Имя универсального символа |
Универсальное имя символа - это кодовая точка Юникода. Имя универсального символа может отображаться более чем на один символ. Цифры n
интерпретируются как шестнадцатеричные цифры. В зависимости от используемой кодировки UTF универсальная последовательность имен символов может приводить к тому, что кодовая точка состоит из нескольких символов, а не одного обычного char
символа.
При использовании escape-последовательности линии в текстовом режиме ввода-вывода он преобразуется в байтовую или байтовую последовательность новой строки.
Для избежания триграфов используется escape-последовательность вопросительного знака. Например, ??/
скомпилирован как триграф, представляющий символ обратной косой черты '\'
, но используя ?\?/
Приведет к строке "??/"
.
В восьмеричной последовательности выхода может быть одна, две или три восьмеричные цифры n
.