Алфавит языка программирования С++ аналогичен алфавитам других языков программирования (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. Можно явно указать тип, используя суффиксы 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.
Перечислимые константы вводятся с помощью служебного слова 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 приведены наиболее часто используемые последовательности.
Строка, или строковая константа, иногда называемая литерной строкой, определяется как последовательность символов, заключенная в кавычки. Среди символов строки могут быть ESC-последовательности, соответствующие не изображаемым символьным константам или символам, задаваемым значениями их внутренних кодов. В этом случае они также начинаются с обратной косой черты. Строки, записанные в программе подряд или через пробельные разделители, при компиляции конкатенируются (склеиваются). Таким образом, в тексте программы последовательность из двух строк:
"Строка - это массив символов. " "Строка имеет тип char[]."
эквивалентна одной строке:
"Строка - это массив символов. Строка имеет тип char[]."
Размещая строку в памяти, транслятор автоматически добавляет в ее конец символ ‘\0’, то есть нулевой байт. Таким образом, количество символов во внутреннем представлении строки на 1 больше числа символов в ее записи. Пустая строка хранится как один символ "\0". Кавычки не входят в строку, а служат ее ограничителями при записи в программе. В строке может быть один символ, например, "А" - строка из одного символа. Однако в отличие от символьной константы 'А' длина внутреннего представления строки "А" равна 2. Строка может быть пустой "", при этом ее длина равна 1. Однако символьная константа не может быть пустой, то есть запись ' ' в большинстве реализаций недопустима.
На следующем шаге будут перечислены операции, которые поддерживаются в языке программирования C++.