Основная программная единица на языке Си++ -это текстовый файл с названием: имя.срр, где срр – принятое расширение для программ на Си++, а имя выбирается достаточно произвольно (желательно из восьми латинских символов без пробелов). Текст программы, написанный на алфавите языка Си++, состоит из лексических элементов, т.е. лексем, с помощью которых строятся выражения, определения, описания, операторы и т.д. Для распознавания начала и конца отдельных лексем используются пробельные разделители. К пробельным разделителям относятся собственно символы пробелов, символы табуляции, символы перехода на новую строку и также комментарии.
Алфавит и лексемы языка Си++.
В алфавит языка Си++ входят:
· прописные и строчные буквы латинского алфавита;
· цифры 0, 1, 2, 3, 4, 5, 6, 7, 8, 9;
· специальные знаки:
“ {}, | [] () + = / % \; ‘:? < = > _! & # ~ ^. *
Из символов алфавита формируются лексемы языка:
· идентификаторы;
· ключевые (служебные, иначе зарезервированные) слова;
· константы;
· знаки операций;
· разделители (знаки пунктуации).
Поскольку в алфавит языка Си++ не входят символы кириллицы, то, следовательно, нельзя их использовать при создании программ на этом языке.
Идентификаторы и служебные слова
Идентификатор (имя) – последовательность из букв латинского алфавита, десятичных цифр и символов подчеркивания, начинающаяся не с цифры:
Array, point1, a, point_2, Point_2, refer
Прописные и строчные буквы различаются. Допустимое число символов в имени зависит от версии компилятора. Компиляторы фирмы Borland различают не более 32-х первых символов любого идентификатора.
Ключевые (служебные) слова – это идентификаторы, зарезервированные в языке для специального использования. Ключевые слова Си++:
| 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 |
Для компиляторов фирмы Borland дополнительно введены ключевые слова:
| Cdecl | _export | _loads | _saveregs |
| _cs | far | Near | _seg |
| _ds | huge | Pascal | _ss |
| _es | interrupt | _regparam |
Там же введены как служебные слова регистровые переменные:
| _AH | _BH | _CH | _DH | _SI | _SP | _SS |
| _AL | _BL | _CL | _DL | _DI | _CS | _ES |
| _AX | _BX | _CX | _DX | _BP | _DS | _FLAGS |
Кроме того, идентификаторы, включающие два подряд символа подчёркивания (__), резервируются для дальнейших реализаций Си++ и стандартных библиотек. Идентификаторы, начинающиеся с символа подчёркивания (_), используются в реализациях языка Си. В связи с этим не рекомендуется выбирать идентификаторы, начинающиеся с одного или двух знаков подчёркивания.
Типы данных
Понятие типа данных является одним из ключевых в языке программирования Си++. Любая переменная, константа, объект, определенный пользователем, неименованный объект, являющийся результатом выполнения какой-либо операции, всегда относится к какому-то типу. Зная тип объекта, всегда можно сказать сколько байт памяти отводится под объект, в каком диапазоне значений могут лежать значения объекта, какое множество операций определено над объектом данного типа, т.е. информация о типе объекта даёт нам представление о его свойствах.
Для определения и описания типа объекта (переменной) используются следующие ключевые слова (имена типов):
сhar (символьный);
short (короткий целый);
int (целый);
long (длинный целый);
float (вещественный);
double (вещественный с удвоенной точностью);
void (отсутствие значения).
Перед именем символьного и целых типов может стоять ключевое слово signed (знаковый – значения объекта могут меняться от –N до N-1), или unsigned (беззнаковый -значения объекта могут меняться от 0 до 2*N-1), которое позволяет выбрать способ учёта знакового разряда. По умолчанию символьный и целые типы являются знаковыми, т.е., например, записи signed int и int являются полными синонимами, поэтому на практике ключевое слово signed почти не употребляется. Напротив, использование ключевого слова unsigned позволяет сделать символьный и целые типы беззнаковыми, поэтому оно используется довольно часто. В выражении unsigned int и signed int слово int можно опустить, компилятор будет подразумевать его по умолчанию.
У вещественных данных также есть тип, состоящий из двух ключевых слов, long double, точность которого выше чем у double.
Типы, введенные с помощью взятых по отдельности или в допустимом сочетании ключевых слов char, short, int, long, signed, unsigned, float, double, void, называются базовыми (фундаментальными, встроенными).
Таблица фундаментальных типов и определенных для них языком Си++ свойств приведена ниже. Тип данных enum относится к целому типу данных, но иногда его выделяют в отдельный так называемый перечисляемый тип.
Таблица 2.1
Таблица целых и вещественных типов данных
| Тип данных | Размер в байтах | Диапазон значений | Примечание – назначение типа |
| unsigned char | 1 | 0…255 | Небольшие целые числа и коды символов |
| сhar | 1 | -128…127 | Очень малые целые числа и ASCII коды |
| enum | 2 | -32768… 32767 | Упорядоченные наборы целых чисел |
| unsigned int | 2 | 0 …65535 | Большие целые и счетчики циклов |
| short int | 2 | -32768… 32767 | Небольшие целые, управление циклами. |
| int | 2 | -32768… 32767 | Небольшие целые, управление циклами |
| unsigned long | 4 | 0…4294967295 | Астрономические расстояния |
| long | 4 | -2147483648...2147483648 | Большие целые, популяции |
| float | 4 | 3.4E-38…3.4E+38 | Научные расчёты (7 значащих цифр) |
| double | 8 | 1.7E-308…1.7E+308 | Научные расчеты (15 значащих цифр) |
| long double | 10 | 3.4E-4932…3.4E+4932 | Финансовые расчёты (19 значащих цифр) |
Из табл. 2.1 видно, например, что объект типа char является объектом символьного типа, занимает в памяти 1 байт и его значения лежать в диапазоне от –128 до 127. Обычно этот тип используется для небольших целых чисел и ASCII кодов.
Количество значащих цифр — это количество цифр, которым представлено число. Так, в числе 2147483648 десять значащих цифр, в числе 0.789 четыре значащих цифры. Следует отметить, что объект типа long имеет больше значащих цифр, чем объект типа float. Поэтому при переходе от типа long к типу float может быть потеряна точность.
Приведем примеры нескольких вариантов определения с помощью базовых типов переменных (объектов) различных типов (объектов):
unsigned char sym; /*В этой строке определяется переменная sym типа unsigned char. Это значит, что переменная занимает в памяти 1 байт и диапазон её возможных значений лежит в интервале от 0 до 255 (см. табл. 2.1). Sym – это идентификатор (имя) переменной придуманное программистом. В конце строки программы стоит точка с запятой, символизирующая конец выражения. */
char Sm 1, Sm 2, Sm 3 = 50; /*В строке программы определены три переменные типа char (свойства см. табл. 2.1). Sm1, Sm2, Sm3 – идентификаторы (имена) переменных. Переменная Sm3 инициализирована неименованной десятичной константой 50 типа int. Значение переменных Sm1, Sm2 неопределено, т. е. может быть любым числом в допустимом для этого типа диапазоне. */
double pi = 3.14159; /* Определена и инициализирована переменная pi типа double. Значение 3.14159 – это неименованная десятичная константа типа double. Как определить тип неименованной константы по её внешнему виду станет ясно при прочтении следующего параграфа. */
По аналогии с приведенными примерами можно вводить переменные и других базовых типов. Более подробное и полное описание таких понятий как определение, описание, область существования, области видимости переменных отложим на некоторое время.
Константы
Константа – это лексема, представляющая изображение фиксированного числового, строкового или символьного значения.
Константы бывают нескольких групп: целые, вещественные (с плавающей точкой), перечислимые, символьные и строковые.
Компилятор при анализе текста программы определяет по «внешнему виду» и числовому значению, к какой группе относится константа.
Целые константы могут быть десятичными, восьмеричными и шестнадцатеричными.
Десятичная целая константа определена как последовательность десятичных цифр, начинающаяся не с нуля, если это не число нуль. Для компиляторов BC++ версии 3.11 диапазон допустимых целых положительных значений от 0 до 4294967295. Константы, превышающие указанное максимальное значение, вызывают ошибку на этапе компиляции. Отрицательные константы – это константы без знака, к которым применена операция изменения знака. Абсолютное значение отрицательных десятичных констант для BC++ 3.11 не должно превышать 2147483647.
В табл. 2.2 приведены типы, выбираемые компилятором по умолчанию на основании значения констант. То есть, например, если константа лежит в диапазоне от 0 до 32767, то для неё по умолчанию будет выбран тип int.
Таблица 2.2






