Константами называют неизменяемые величины. Различаются целые, вещественные, символьные и строковые константы. Компилятор, выделив константу в качестве лексемы, относит ее к одному из типов по ее внешнему виду (формат константы можно указать самостоятельно).
Форматы констант, соответствующие каждому типу, приведены в таблице ниже.
Константа | Формат | Константа |
Целая | Десятичный: последовательность десятичных цифр, начинающаяся не с нуля, если это не число нуль Восьмеричный: нуль, за которым следуют восьмеричные цифры (0,1,2,3,4,5,6,7) Шестнадцатеричный: 0х или 0Х, за которым следуют шестнадцатеричные цифры (0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F) | 8, 0, 199226 01, 020, 07155 0хА, 0x1B8, 0X00FF |
Вещественная | Десятичный:[цифры].[цифры] Экспоненциальный: [цифры][.][цифры]{Е¦е}[+¦ -][цифры] | 5.7, .001, 35.0.2Е6, .11е-З, 5Е10 |
Символьная | Один или два символа, заключенных в апострофы | ‘А’, ‘ю’, ‘*’, ‘db’, ‘\0′, ‘\n’ , ‘\012′, ’\x07\x07′ |
Строковая | Последовательность символов, заключенная в кавычки | «Здесь был Vasia»,»\t3начение r=\0xF5\n» |
Не следует забывать, что у каждого типа данных есть диапазон допустимых значений.
Если требуется сформировать отрицательную целую или вещественную константу, то перед константой ставится знак унарной операции изменения знака (-), например: -218, -022, -0х3C, -4.8, -0.1e4.
Вещественная константа в экспоненциальном формате представляется в виде мантиссыи порядка. Мантисса записывается слева от знака экспоненты (Е или е), порядок — справа от знака. Значение константы определяется как произведение мантиссы и возведенного в указанную в порядке степень числа 10. Обратите внимание, что пробелы внутри числа не допускаются, а для отделения целой части от дробной используется не запятая, а точка.
Символьные константы, состоящие из одного символа, занимают в памяти один байт и имеют стандартный тип char. Двухсимвольные константы занимают два байта и имеют тип int, при этом первый символ размещается в байте с меньшим адресом.
Символ обратной косой черты используется для представления:
- кодов, не имеющих графического изображения (например, \а — звуковой сигнал, \n — перевод курсора в начало следующей строки);
- символов апострофа ( ‘ ) , обратной косой черты ( \ ), знака вопроса ( ? ) и кавычки ( ” );
- любого символа с помощью его шестнадцатеричного или восьмеричного кода, например, \073, \0xF5. Числовое значение должно находиться в диапазоне от 0 до 255.
Последовательности символов, начинающиеся с обратной косой черты, называют управляющими, или escape-последовательностями.
В таблице ниже приведены их допустимые значения. Управляющая последовательность интерпретируется как одиночный символ. Если непосредственно за обратной косой чертой следует символ, не приведенный в табл. ниже, результат интерпретации не определен. Если в последовательности цифр встречается недопустимая, она считается концом цифрового кода.
Изображение | Шестнадцатеричный код | Наименование |
\a | 7 | Звуковой сигнал |
\b | 8 | Возврат на шаг |
\f | С | Перевод страницы (формата) |
\n | А | Перевод строки |
\r | D | Возврат каретки |
\t | 9 | Горизонтальная табуляция |
\v | В | Вертикальная табуляция |
\\ | 5С | Обратная косая черта |
\’ | 27 | Апостроф |
\» | 22 | Кавычка |
\? | 3F | Вопросительный знак |
\0ddd | – | Восьмеричный код символа |
\0xddd | ddd | Шестнадцатеричный код символа |
Управляющие последовательности могут использоваться и в строковых константах, называемых иначе строковыми литералами. Например, если внутри строки требуется записать кавычку, ее предваряют косой чертой, по которой компилятор отличает ее от кавычки, ограничивающей строку:
“Издательский дом \“Питер\””
Управляющие последовательности в основном используются для отображения символов, не имеющих графического изображения (перенос строки, табуляция и т.д.).
Все строковые литералы рассматриваются компилятором как различные объекты.
Строковые константы, отделенные в программе только пробельными символами, при компиляции объединяются в одну. Длинную строковую константу можно разместить на нескольких строках, используя в качестве знака переноса обратную косую черту, за которой следует перевод строки. Эти символы игнорируются компилятором, при этом следующая строка воспринимается как продолжение предыдущей. Например, строка
“Никто не доволен своей \
внешностью, но все довольны \
своим умом”
полностью эквивалентна строке
“Никто не доволен своей внешностью, но все довольны своим умом”
В конец каждого строкового литерала компилятором добавляется нулевой символ, представляемый управляющей последовательностью \0.
Поэтому длина строки всегда на единицу больше количества символов в ее записи. Таким образом, пустая строка "" имеет длину 1 байт. Обратите внимание на разницу между строкой из одного символа, например, «А», и символьной константой 'А'. Пустая символьная константа недопустима.