Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
04-09-2015_19-17-13 / Конспект лекций.doc
Скачиваний:
98
Добавлен:
01.03.2016
Размер:
1.31 Mб
Скачать

1.3. Идентификаторы и служебные слова

Идентификатор - последовательность из букв латинского алфа­вита, десятичных цифр и символов подчеркивания, начинающаяся не с цифры:

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 все из перечисленных служебных слов сразу же необходимы программисту, однако их запрещено использовать в качестве произ­вольно выбираемых имен, и список служебных слов нужно иметь уже на начальном этапе знакомства с языком Си++. Кроме того, иденти­фикаторы, включающие два подряд символа подчеркивания, ре­зервируются для реализации Си++ и стандартных библиотек. Идентификаторы, начинающиеся с символа подчеркивания, ис­пользуются в реализациях языка Си. В связи с этим начинать выби­раемые пользователем идентификаторы с символа подчеркивания и использовать в них два подряд символа подчеркивания не рекоменду­ется.

2. Константы: целые, вещественные (с пла­вающей точкой), перечислимые, символьные (литерные), строковые (строки или литерные строки)

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

Константы делятся на пять групп: целые, вещественные (с пла­вающей точкой), перечислимые, символьные (литерные) и строковые (строки или литерные строки). Перечислимые константы проект стан­дарта языка Си++ относит к одному из целочисленных типов.

Компилятор, выделив константу в качестве лексемы, относит её к той или другой группе, а внутри группы - к тому или иному типу дан­ных по ее "внешнему виду" (по форме записи) в исходном тексте и по числовому значению.

Целая константа: это десятичное, восьмеричное или шестнадцатеричное число, которое представляет целую величину в одной из следующих форм: десятичной, восьмеричной или шестнадцатеричной.

Десятичная константа состоит из одной или нескольких десятичных цифр, причем первая цифра не должна быть нулем (если это не число 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

000

Восьмеричный код символа

\xhh

0xhh

Шестнадцатеричный код символа

Значением символьной константы является числовое значение ее внутреннего кода. Как упоминалось, в Си++ односимвольная кон­станта имеет тип char, т.е. занимает в памяти 1 байт. Двухсимвольные константы вида '\t\n' или \n\07' представляются двухбайтовыми значениями типа int.

Строка, или строковая константа, иногда называемая литерной строкой, определяется как последовательность символов, заключен­ная в кавычки (не в апострофы):

"Это строка, называемая также строковой константой"

Говоря о строках, иногда используют термины "строковый лите­рал", "стринговый литерал", "стринговая константа", "стринг", однако мы будем придерживаться традиционной терминологии, так как опыт показывает, что возможное неоднозначное толкование тер­мина "строка" легко устраняется контекстом. Среди символов строки могут быть эскейп-последовательности, т.е. сочетания, соответствующие неизобра­жаемым символьным константам или символам, задаваемым значе­ниями их внутренних кодов. В этом случае, как и в представлениях отдельных символов, они начинаются с обратной косой черты ' \ ':

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

Длинную строковую константу можно еще одним способом раз­местить в нескольких строках текста программы, используя специальное обозначение переноса - ' \ '.

Размещая строку в памяти, транслятор автоматически добавляет в ее конец символ '\0', т.е. нулевой байт. Таким образом, количество символов во внутреннем представлении строки на 1 больше числа символов в ее записи. Пустая строка хранится как один символ "\0".

Кроме непосредственного использования строк в выражениях, строку можно поместить в символьный (типа char) массив с вы­бранным именем и в дальнейшем обращаться к ней по имени массива.

Кавычки не входят в строку, а служат ее ограничителями при за­писи в программе. В строке может быть один символ, например, "а" - строка из одного символа. Однако в отличие от символьной констан­ты 'а' длина внутреннего представления строки "а" равна 2. Строка может быть пустой "", при этом ее длина равна 1. Однако символьная константа не может быть пустой, т.е. запись '' в большинстве реали­зации недопустима.

Соседние файлы в папке 04-09-2015_19-17-13