- •Лекция 2
- •Упрощенная модель компиляции
- •Лексический анализ программы
- •Категории лексем
- •Идентификаторы
- •Ключевые слова
- •Зарезервированные идентификаторы
- •Стандартные идетификаторы
- •Идентификатор пользователя
- •Константы
- •Литералы
- •Целые константы
- •Вещественные константы
- •Булевские (логические) константы
- •Символьные константы
- •Строковые константы
- •Именованные константы
- •Перечисляемые константы
- •Препроцессорные константы
- •Знаки операций
- •Знаки пунктуации
- •Разделители
- •Пробельные разделители
Булевские (логические) константы
Булевские константы – это литералы true (истина) и false (ложь). Их можно использовать в логических выражениях и присваивать логическим переменным. В С++ действует также унаследованное из С правило, в соответствии с которым значению ложь соответствует число 0, а значению истина – любое число, отличное от 0.
Символьные константы
Символьные литералы – это один или несколько символов, заключенных в апострофы: ’A’, ’я’, ’+’, ’\n’. Перед начальным апострофом может размещаться буква L. Между апострофами может быть записан произвольный символ, кроме \, ‘, “, ?. Эти символы записываются в виде ESC-последовательностей: \\, \’, \”, \?.
Ординарная односимвольная константа имеет тип char, записывается без ведущего символа L, состоит из одного символа. Ее значение эквивалентно числовому значению из применяемой в реализации кодовой таблицы символов (например, на IBM-совместимых компьютерах, таблицы кодов ASCII). Ординарная мультисимвольная константа имеет тип int и состоит из нескольких символов (ее значение зависит от реализации).
Константа, включающая ведущий символ L, имеет тип wchar_t и называется широкой (широкосимвольной). Значением широкой константы из одного символа является числовое значение кода из применяемой в реализации кодовой таблицы символов. Значение широкой константы из нескольких символов зависит от реализации.
Символьная константа может использоваться как целая константа, причем ее значением является интерпретация внутреннего представления данного символа в виде целого значения. Символьная константа не может быть пустой.
Для визуального представления неграфических символов используются ESC-последовательности, записываемые между апострофами. ESC-последовательность начинается символом обратной дробной черты ( \ - backslash) и может быть представлена:
-
одним знаком:
переход на новую строку ( \n), горизонтальная табуляция ( \t), возврат каретки (\r), звонок (\a), обратная дробная черта (\\), возврат на один шаг (backspace, \b); нуль-символ окончания строки в С++(NULL) ‘\0’
-
числом из 1 .. 3 восьмеричных цифр, определяющим код символа; ‘\ooo’, где ooo – восьмеричные цифры, представляющие символ в таблице кодов ASCII (восьмеричное число в диапазоне от 0 до 377, превышение приводит к ошибке);
-
.числом из 1-3 шестнадцатеричных цифр, определяющим код символа, (с предшествующей буквой X или х); так можно представить и печатаемый символ (за \x может быть записано любое количество шестнадцатеричных цифр, однако значение не должно выходить за диапазон 0x00-0xFF). Любой неподходящий символ последовательности \ооо или \хhhh считается концом восьмеричного или соответственно шестнадцатеричного кода.
Например:
‘\x27’ – АSCII-код символа апострофа;
‘\xa’ – АSCII-код символа перехода на новую строку;
‘\40’ – АSCII-код пробела;
Таблица 1.5. Управляющие последовательности (основные ESC-последовательности):
содержание |
последовательность |
обозначение |
значение |
Новая строка |
\n |
NL (LF) |
0ха |
Возврат каретки |
\r |
CR |
0хd |
Звонок |
\a |
BEL |
0х7 |
Горизонтальная табуляция |
\t |
HT |
0х9 |
Вертикальная табуляция |
\v |
VT |
0хb |
Возврат на шаг |
\b |
BS |
0х8 |
Перевод формата |
\f |
FF |
|
Обратная косая черта |
\\ |
\ |
0х5с |
Апостроф |
\’ |
‘ |
0х27 |
Двойная кавычка |
\” |
“ |
0х22 |
Знак вопроса |
\? |
? |
|
Нулевой символ |
‘\0’ |
NULL |
|
Восьмеричный код |
\ооо |
ооо |
|
Шестнадцатеричный код |
\хhhh |
hhh |
|
Вычислить размеры памяти, выделенной для символьных констант разных типов, помогут, например, операторы:
#include <iostream>
using namespace std;
int main() {
cout << sizeof 'z' << endl;
cout << sizeof '\n\t' << endl;
cout << sizeof L'\x4F' << endl;
cout << sizeof '\111' << endl;
_getch();
return 0;
}