Идентификатор - последовательность из букв латинского алфавита, десятичных цифр и символов подчеркивания, начинающаяся не с цифры:
RON run hard_RAM_disk copy_54
Прописные и строчные буквы различаются. Таким образом, в этом примере два первых идентификатора различны. На длину различаемой части идентификатора конкретные реализации накладывают ограничение.
Ключевые (служебные) слова - это идентификаторы, зарезервированные в языке для специального использования. Ключевые слова Си++:
asm double new switch
auto else operator template
break enum private this
case extern protected throw
catch float public try
char for register typedef
class friend return typeid
const goto short union
continue if signed unsigned
default inline sizeof virtual
delete int static void
do long struct volatile while
He все из перечисленных служебных слов сразу же необходимы программисту, однако их запрещено использовать в качестве произвольно выбираемых имен, и список служебных слов нужно иметь уже на начальном этапе знакомства с языком Си++. Кроме того, идентификаторы, включающие два подряд символа подчеркивания, резервируются для реализации Си++ и стандартных библиотек. Идентификаторы, начинающиеся с символа подчеркивания, используются в реализациях языка Си. В связи с этим начинать выбираемые пользователем идентификаторы с символа подчеркивания и использовать в них два подряд символа подчеркивания не рекомендуется.
3. Константы: целые, вещественные (с плавающей точкой), перечислимые, символьные (литерные), строковые (строки или литерные строки)
Константа (литерал) - это лексема, представляющая изображение фиксированного числового, строкового или символьного (литерного) значения.
Константы делятся на пять групп: целые, вещественные (с плавающей точкой), перечислимые, символьные (литерные) и строковые (строки или литерные строки). Перечислимые константы проект стандарта языка Си++ относит к одному из целочисленных типов.
Компилятор, выделив константу в качестве лексемы, относит её к той или другой группе, а внутри группы - к тому или иному типу данных по ее "внешнему виду" (по форме записи) в исходном тексте и по числовому значению.
Целая константа: это десятичное, восьмеричное или шестнадцатеричное число, которое представляет целую величину в одной из следующих форм: десятичной, восьмеричной или шестнадцатеричной.
Десятичная константа состоит из одной или нескольких десятичных цифр, причем первая цифра не должна быть нулем (если это не число 0), в противном случае число будет воспринято как восьмеричное.
Восьмеричная константа состоит из обязательного нуля и одной или нескольких восьмеричных цифр (среди цифр должны отсутствовать восьмерка и девятка, так как эти цифры не входят в восьмеричную систему счисления).
Шестнадцатеричная константа начинается с обязательной последовательности 0х или 0Х и содержит одну или несколько шестнадцатеричных цифр (цифры представляющие собой набор цифр шестнадцатеричной системы счисления: 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F)
Примеры целых констант:
Десятичная Восьмеричная Шестнадцатеричная
константа константа константа
16 020 0x10
127 0117 0x2B
240 0360 0XF0
Если требуется сформировать отрицательную целую константу, то используют знак "-" перед записью константы (который будет называться унарным минусом).
Например: -0x2A, -088, -16 .
Каждой целой константе присваивается тип, определяющий преобразования, которые должны быть выполнены, если константа используется в выражениях. Тип константы определяется следующим образом:
- десятичные константы рассматриваются как величины со знаком, и им присваивается тип int (целая) или long (длинная целая) в соответствии со значением константы.
- восьмеричным и шестнадцатеричным константам присваивается тип int, unsigned int (беззнаковая целая), long или unsigned long в зависимости от значения константы.
Если программиста по каким-либо причинам не устраивает тот тип, который компилятор приписывает константе, то он может явным образом повлиять на его выбор. Для этого служат суффиксы L, l (long) и U, u (unsigned). Например, константа 64L будет иметь тип long, хотя значению 64 должен быть приписан тип int. Для одной константы можно использовать два суффикса U(u) и L(l), причем в произвольном порядке. Например, константы Ох22Ul, Ox16Lu будут иметь тип unsigned long.
Вещественные константы, т.е. константы с плавающей точкой, даже не отличаясь от целых констант по значению, имеют другую форму внутреннего представления в ЭВМ. Эта форма требует использования арифметики с плавающей точкой при операциях с такими константами. Поэтому компилятор должен уметь распознавать вещественные константы. Распознает он их по внешним признакам. Константа с плавающей точкой может включать следующие шесть частей:
·целая часть (десятичная целая константа);
·десятичная точка;
·дробная часть (десятичная целая константа);
·признак (символ) экспоненты е или Е;
·показатель десятичной степени (десятичная целая константа, возможно со знаком);
·суффикс F(или f – одинарная точность) либо l (или 1 – удвоенная точность).
В записях вещественных констант могут опускаться: целая или дробная часть (но не одновременно); десятичная точка или признак экспоненты с показателем степени (но не одновременно); суффикс. Примеры:
66.
| .0
| .12
| 3.14159F
| 2E+6L
| 2.71
| 1.12е-2
|
При отсутствии суффиксов f (f) или L (1) вещественные константы имеют форму внутреннего представления, которой в языке Си++ соответствует тип данных double. Добавив суффикс f или F, константе придают тип float. Константа имеет тип long double, если в ее представлении используется суффикс L или 1.
перечислимые константы (или константы перечисления, иначе константы перечислимого типа) вводятся с помощью служебного слова enum. По существу это обычные целочисленные константы (типа int), которым приписаны уникальные и удобные для использования обозначения. В качестве обозначений выбираются произвольные идентификаторы, не совпадающие со служебными словами и именами других объектов программы. Обозначения присваиваются константам с помощью определения, например, такого вида:
enum { one= 1, two = 2, three = 3 };
Здесь enum - служебное слово, определяющее тип данных "перечисление", one, two, three - условные имена, введенные программистом для обозначения констант 1,2,3. После такого определения в программе вместо константы 2 (и наряду с ней) можно использовать ее обозначение two и т.д.
Если в определении перечислимых констант опускать знаки "=" и не указывать числовых значений, то они будут приписываться идентификаторам (именам) по умолчанию. При этом самый левый в фигурных скобках идентификатор получит значение 0, а каждый последующий увеличивается на 1. Например, в соответствии с определением
enum { zero, one, two, three };
перечислимые константы примут значения:
zero=0, one=1, two=2, three=3
Правило о последовательном увеличении на 1 значений перечислимых констант действует и в том случае, когда первым из них (слева в списке) явно присвоены значения.
Имена перечислимых констант должны быть уникальными, однако к значениям констант это не относится. Одно значение могут иметь разные константы.
Так как отрицательная целая константа - это константа без знака, к которой применена унарная операция "-" (минус), то перечислимые константы могут иметь и отрицательные значения.
Для перечислимых констант может быть введено имя типа, соответствующего приведенному списку констант. Имя типа - это произвольно выбираемый уникальный идентификатор, помещаемый между служебным словом enum и открывающейся фигурной скобкой.
enum Numbers {zero, one, two, three };
Символьные (литерные) константы - это один или два символа, заключенные в апострофы. Односимвольные константы имеют стандартный тип char. Для представления их значений могут вводится переменные символьного типа, т.е. типа char. Примеры констант: 'z', '*', '\012', '\0', '\n', '\х07' - односимвольные константы, 'db', '\х07\х07', '\n\f' - двухсимвольные константы. В этих примерах заслуживают внимания последовательности, начинающиеся со знака '\'. Символ обратной косой черты '\' используется, во-первых, при записи кодов, не имеющих графического изображения, и, во-вторых, символов апостроф (\'), обратная косая черта (\\), знак вопроса (\?) и кавычки (\'). Кроме того, обратная косая черта позволяет вводить символьные константы, явно задавая их коды в восьмеричном или шестнадцатеричном виде. Последовательности литер, начинающиеся со знака '\', называют эскейп-последовательностями.
Допустимые ESC-последовательности в языке С++
Изображение
| Внутренний код
| Реакция или смысл
|
\a
| 0x07
| Звуковой сигнал
|
\b
| 0x08
| Возврат на шаг (забой)
|
\f
| 0x0C
| Перевод страницы (формата)
|
\n
| 0x0A
| Перевод строки (новая строка)
|
\r
| 0x0D
| Возврат каретки
|
\t
| 0x09
| Табуляция горизонтальная
|
\v
| 0x0B
| Табуляция вертикальная
|
\\
| 0x5C
| Обратная косая черта
|
\'
| 0x27
| Апостроф (одинарная кавычка)
|
\"
| 0x22
| Двойная кавычка
|
\?
| 0x3F
| Вопросительный знак
|
\000
|
| Восьмеричный код символа
|
\xhh
| 0xhh
| Шестнадцатеричный код символа
|
Значением символьной константы является числовое значение ее внутреннего кода. Как упоминалось, в Си++ односимвольная константа имеет тип char, т.е. занимает в памяти 1 байт. Двухсимвольные константы вида '\t\n' или \n\07' представляются двухбайтовыми значениями типа int.
Строка, или строковая константа, иногда называемая литерной строкой, определяется как последовательность символов, заключенная в кавычки (не в апострофы):
"Это строка, называемая также строковой константой"
Говоря о строках, иногда используют термины "строковый литерал", "стринговый литерал", "стринговая константа", "стринг", однако мы будем придерживаться традиционной терминологии, так как опыт показывает, что возможное неоднозначное толкование термина "строка" легко устраняется контекстом. Среди символов строки могут быть эскейп-последовательности, т.е. сочетания, соответствующие неизображаемым символьным константам или символам, задаваемым значениями их внутренних кодов. В этом случае, как и в представлениях отдельных символов, они начинаются с обратной косой черты ' \ ':
Строка - это массив символов. Строка имеет тип char[].
Длинную строковую константу можно еще одним способом разместить в нескольких строках текста программы, используя специальное обозначение переноса - ' \ '.
Размещая строку в памяти, транслятор автоматически добавляет в ее конец символ '\0', т.е. нулевой байт. Таким образом, количество символов во внутреннем представлении строки на 1 больше числа символов в ее записи. Пустая строка хранится как один символ "\0".
Кроме непосредственного использования строк в выражениях, строку можно поместить в символьный (типа char) массив с выбранным именем и в дальнейшем обращаться к ней по имени массива.
Кавычки не входят в строку, а служат ее ограничителями при записи в программе. В строке может быть один символ, например, "а" - строка из одного символа. Однако в отличие от символьной константы 'а' длина внутреннего представления строки "а" равна 2. Строка может быть пустой "", при этом ее длина равна 1. Однако символьная константа не может быть пустой, т.е. запись '' в большинстве реализации недопустима.