Константа — это фиксированное значение, которое не может быть изменено программой. Константа может относиться к любому базовому типу. Способ представления константы определяется ее типом. Константы также называются литералами.
Символьные константы заключаются в одинарные кавычки. Например, 'а' и '%' — это символьные константы. В языке С определены многобайтовые (состоящие из одного или более байт) и широкие (обычно длиной 16 бит) символы. Они используются для представления символов языков, имеющих в своем алфавите много букв. Многобайтовый символ записывается в одинарных кавычках, например, 'ху', а широкий — с предшествующим символом L, например:
wchar_t wc; wc = L'A';
Здесь переменной wc присвоено значение константы А, рассматриваемой как широкий символ. Тип широкого символа wchar_t определен в заголовочном файле <stddef.h>, этот тип не является встроенным.
Целые константы определяются как числа без дробной части. Например, 10 и -100 — это целые константы. Константы в плавающем формате записываются как числа с десятичной точкой, например, 11.123. Допускается также экспоненциальное представление чисел (в виде мантиссы и порядка): 111.23е— 1.
По умолчанию компилятор приписывает константе тип наименьшего размера, в ячейку которого может уместиться константа. Таким образом, если целые числа обычно являются 16-разрядными, то константа 10 по умолчанию имеет тип int, a 103000 — тип long int. Число 10 может поместиться в типе char, однако компилятор не нарушит границы типов и поместит ее в int. Но это правило имеет исключение: всем константам в плавающем формате, даже самым маленьким, приписывается тип double (если, конечно, они сюда помещаются).
Определение типов констант по умолчанию является вполне удовлетворительным при разработке большинства программ. Однако, используя суффикс, можно явно указать тип числовой константы. Если после числа в плавающем формате стоит суффикс F, то считается, что константа имеет тип float, а если L, то long double. Для целых типов суффикс U означает unsigned, a L — long. Тип суффикса не зависит от регистра, например, как F, так и f определяют константы типа float. Приведем несколько примеров:
Тип данных | Примеры констант | |||
---|---|---|---|---|
int | 1 | 123 | 21000 | -243 |
long int | 35000L | -34L | ||
unsigned int | 10000U | 987u | 40000U | |
float | 123.23F | 4.34e-4f | ||
double | 123.23 1.0 | -0.98765432 | ||
long double | 1001.2L |
Стандарт С99 определяет также целые константы типа long long, их суффикс — LL или ll.
Иногда удобнее использовать не десятичную, а восьмеричную или шестнадцатеричную систему. Позиционную систему счисления с основанием 8 называют восьмеричной. В ней используются цифры от 0 до 7. Число 10 в восьмеричной системе представляет то же число, что и 8 в десятичной. Позиционная система счисления с основанием 16 называется шестнадцатеричной. В ней используются 16 символов: цифры от 0 до 9 и символы от А до F, обозначающие цифры от 10 до 15. Например, запись 10 в шестнадцатеричной системе обозначает то же число, что и 16 в десятичной системе. Эти системы счисления используются довольно часто, поэтому в С целые константы можно определять не только в десятичной, но и в восьмеричной и шестнадцатеричной системах счисления. Шестнадцатеричная константа начинается с 0х, а восьмеричная — с 0, например:
int hex = 0x80; /* 128 в десятичной системе */ int oct = 012; /* 10 в десятичной системе */
Язык С поддерживает еще один тип констант, а именно — строковые. Строка — это последовательность символов, заключенных в двойные кавычки. Например, "тест" — это строка. В этой книге ранее уже встречались примеры строк в функции printf(). В термине "строковая константа" слово "строковая" не означает строковый предопределенный тип данных, такого в С нет, здесь это всего лишь прилагательное.
Не следует путать понятия строки и символа. Символьная константа заключается в одинарные кавычки, например, 'а'. Соответственно запись "а" означает строку, состоящую из одного символа.
Чтобы представить большинство символьных констант, достаточно заключить соответствующий символ в одинарные кавычки. Но некоторые символы, например, символ возврата каретки, требуют специального представления. В языке С определены специальные символьные константы, приведенные в табл. 2.2. Иногда их называют ESC-последовательностями, управляющими последовательностями и символами с обратным слэшем. Управляющие последовательности можно использовать вместо ASCII-кодов для обеспечения лучшей переносимости программы.
В следующем примере программа выводит символ новой строки (т.е. переходит на новую строку), выводит символ табуляции (т.е. переходит на первую позицию табуляции) и, наконец, выводит строку Простой тест.
#include <stdio.h> int main(void) { printf("\n\tПростой тест."); return 0; }
Код | Назначение |
---|---|
\b | Удаление предыдущего символа |
\f | Подача бумаги |
\n | Новая строка |
\r | Возврат каретки |
\t | Горизонтальная табуляция |
\" | Двойные кавычки |
\' | Одинарная кавычка |
\\ | Обратный слэш |
\v | Вертикальная табуляция |
\a | Сигнал |
\? | Знак вопроса |
\N | Восьмеричная константа (N - восьмеричное представление) |
\xN | Шеснадцатеричная константа (N - шеснадцатеричное представление) |