Шаг 1.
Общие сведения о программах, лексемах и алфавите

    Алфавит языка программирования С++ аналогичен алфавитам других языков программирования (Pascal, Basic и т.д.). Из символов алфавита формируются лексемы языка (лексема – последовательность символов, обрабатываемая компилятором):

    Идентификатор - последовательность из букв латинского алфавита, десятичных цифр и символов подчеркивания, начинающаяся не с цифры, например: RUN, Run, summa_factorial. Прописные и строчные буквы различаются. Таким образом, в этом примере два первых идентификатора различны. Длина различаемой части идентификатора зависит от реализации языка С++.

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

    Константа (литерал) - это лексема, представляющая изображение фиксированного числового, строкового или символьного (литерного) значения. Константы бывают:

    Целые константы могут быть десятичными, восьмеричными и шестнадцатиричными. Десятичная целая константа определена как последовательность десятичных цифр, начинающаяся не с нуля, если это не число нуль, например: 16, 484216, 0, 4. Диапазон допустимых целых положительных значений от 0 до 4 294 967 295. Константы, превышающие указанное максимальное значение, вызывают ошибку на этапе компиляции. Отрицательные константы - это константы без знака, к которым применена операция изменения знака. Их абсолютные значения не должны превышать 2147483648.

    Восьмеричные целые константы начинаются всегда с нуля, например 016 имеет десятичное значение 14.

    Последовательность шестнадцатиричных цифр, которой предшествует 0x считается шестнадцатиричной константой. В шестнадцатиричные цифры кроме десятичных входят латинские буквы от а (или А) до f (или F). Таким образом, 0х16 имеет десятичное значение 22, a 0xF - десятичное значение 15.

   

Таблица 1. Целые константы и выбираемые для них типы
Диапазоны значений констант
Тип данных
Десятичные
Восьмеричные
Шестнадцатеричные
от 0 до 32767
от 00 до 077777
от 0х0000 до 0х7FFF
int
 
от 0100000 до 0177777
от 0х8000 до 0xFFFF
unsigned int
от 32768 до 2147483647
от 0200000 до 017777777777
от 0x10000 до 0x7FFFFFFF
long
от 2147483648 до 4294967295
от 020000000000 до 037777777777
от 0x80000000 до 0xFFFFFFFF
unsigned long

    В зависимости от значения целой константы компилятор по-разному представляет её в памяти ЭВМ. Соответствие между значениями целых констант и автоматически выбираемыми для них компилятором типами данных отображает таблица 1. Можно явно указать тип, используя суффиксы L, l (long) и U, u (unsigned). Например, константа 64L будет иметь тип long, хотя значению 64 должен быть приписан тип int, как это видно из таблицы 1. Для одной константы можно использовать два суффикса в произвольном порядке. Например, константы 0x22ul, 0x33Lu будут иметь тип unsigned long.

    Вещественные константы распознаются компилятором по внешним признакам. Константа с плавающей точкой может включать следующие семь частей:

    В записях вещественных констант могут опускаться: целая или дробная часть (но не одновременно); десятичная точка или признак экспоненты с показателем степени (но не одновременно); суффикс. Примеры: 66.; .0; .12; 3.14159F; 1.12e-2; 2E+6L; 2.71.

    При отсутствии суффиксов вещественные константы имеют форму внутреннего представления, которой в языке С++ соответствует тип данных double. Добавив суффикс f или F, константе придают тип float. Константа имеет тип long double, если в ее представлении используется суффикс L или l. Диапазоны возможных значений и длины внутреннего представления (размер в битах) данных вещественного типа показаны в таблице 2.

Таблица 2. Данные вещественного типа
Тип данных
Размер, бит
Диапазон значений
float
32
от 3.4Е-38до 3.4Е+38
double
64
от 1.7Е-308 до 1.7Е+308
long double
80
от 3.4Е-4932 до 1.1Е+4932

    Перечислимые константы вводятся с помощью служебного слова enum. Как правило, это целочисленные константы типа int, которым приписаны уникальные и удобные для использования обозначения. В качестве обозначений выбираются произвольные идентификаторы, не совпадающие со служебными словами и именами других объектов программы. Обозначения присваиваются константам с помощью определения, например: enum { one = 1, two = 2, three = 3 };. После такого определения в программе вместо константы 2 (и наряду с ней) можно использовать ее обозначение two и т.д.

    Если в определении перечислимых констант опускать знаки "=" и не указывать числовых значений, то они будут приписываться идентификаторам (именам) по умолчанию. При этом самый левый в фигурных скобках идентификатор получит значение 0, а каждый последующий увеличивается на 1.

    Для перечислимых констант может быть введено имя типа, соответствующего приведенному списку констант. Имя типа - это произвольно выбираемый уникальный идентификатор, помещаемый между служебным словом enum и открывающейся фигурной скобкой. Например, определение: enum week { Sunday, Monday, Tuesday, Wednesday, Thursday, Ffriday, Saturday }; не только определяет константы, но и вводит перечислимый тип с именем week, который может в дальнейшем использоваться в определениях и описаниях других объектов.

    Символьная (литерная) константа - это один символ, заключенный в апострофы. Для размещения их значений могут вводится переменные символьного типа, то есть типа char. Примеры констант: 'z', '*', '\0l2', '\0', '\n'. Последовательности литер, начинающиеся со знака '\', называют ESC-последовательностями. В таблице 3 приведены наиболее часто используемые последовательности.

   

Таблица 3. Часто используемые ESC-последовательности
Изображение
Внутренний код
Реакция или смысл
\a
0х07
Звуковой сигнал
\b
0х08
Возврат на шаг (забой)
\f
0х0C
Новая страница
\n
0х0A
Новая строка
\r
0х0D
Возврат каретки
\t
0х09
Табуляция горизонтальная
\v
0х0B
Табуляция вертикальная
\\
0х5С
Обратная косая черта (\)
\’
0х27
Одинарная кавычка (')
\"
0х22
Двойная кавычка (“)
\?
0х3F
Вопросительный знак

    Строка, или строковая константа, иногда называемая литерной строкой, определяется как последовательность символов, заключенная в кавычки. Среди символов строки могут быть ESC-последовательности, соответствующие не изображаемым символьным константам или символам, задаваемым значениями их внутренних кодов. В этом случае они также начинаются с обратной косой черты. Строки, записанные в программе подряд или через пробельные разделители, при компиляции конкатенируются (склеиваются). Таким образом, в тексте программы последовательность из двух строк:

     "Строка - это массив символов. " "Строка имеет тип char[]."

эквивалентна одной строке:

     "Строка - это массив символов. Строка имеет тип char[]."

    Размещая строку в памяти, транслятор автоматически добавляет в ее конец символ ‘\0’, то есть нулевой байт. Таким образом, количество символов во внутреннем представлении строки на 1 больше числа символов в ее записи. Пустая строка хранится как один символ "\0". Кавычки не входят в строку, а служат ее ограничителями при записи в программе. В строке может быть один символ, например, "А" - строка из одного символа. Однако в отличие от символьной константы 'А' длина внутреннего представления строки "А" равна 2. Строка может быть пустой "", при этом ее длина равна 1. Однако символьная константа не может быть пустой, то есть запись ' ' в большинстве реализаций недопустима.

    На следующем шаге будут перечислены операции, которые поддерживаются в языке программирования C++.




Содержание Следующий шаг