Идентификатор - это имя программного объекта (переменной, функции). При именовании переменной или функции могут использоваться латинские буквы, цифры и знак подчёркивания. Прописные и строчные буквы различаются, например А1 и а1 – два различных имени. Первым символом идентификатора может быть буква или знак подчёркивания, но не цифра. Пробелы внутри имён не допускаются. Приведём пример двух основных традиций именования переменных. Одной из них является так называемая венгерская запись, по которой каждое слово, составляющее идентификатор, начинается с прописной буквы, например, MaxDlina. Другая традиция – разделять слова, составляющие имя, знаками подчёркивания: max_dlina.
Идентификатор создаётся на этапе объявления переменной, функции и т.п. При выборе идентификатора необходимо иметь в виду следующее:
- идентификатор не должен совпадать с ключевыми (зарезервированными) словами и именами используемых стандартных объектов языка;
- не рекомендуется начинать идентификаторы с символа подчёркивания, поскольку они могут совпасть с именами системных функций или переменных.
Типы данных в С++
Основное предназначение любой программы заключается во вводе данных, их обработке и выводе. Данные различного типа хранятся и обрабатываются по разному. Тип данных определяет:
- внутреннее представление данных в памяти компьютера;
- множество значений, которые могут принимать величины этого типа;
- операции и функции, которые можно применять к величинам этого типа.
Обязательное описание типа данных позволяет компилятору производить проверку допустимости различных конструкций программы. Все типы языка С++ можно разделить на основные и составные. В языке С++ определено шесть основных (стандартных) типов данных для представления целых величин (int), вещественных (float; double – с двойной точностью), символьных (char; wchar_t - расширенный) и логических величин (bool). На основе этих основных типов данных программист может вводить описание составных типов. К ним относятся массивы, перечисления, функции, структуры, ссылки, указатели, объединения и классы.
Существует четыре спецификатора, уточняющих внутреннее представление и диапазон значений стандартных типов:
- short (короткий);
- long (длинный);
- signed (знаковый) – по умолчанию все целочисленные типы считаются знаковыми, т.е. этот спецификатор можно опускать;
- unsigned (беззнаковый).
Рассмотрим диапазон значений стандартных типов данных для 32-разрядного процессора (см. табл.).
Название типа
| Диапазон значений
| Точность
| Размер (байт)
|
bool
| false и true
| нет
|
|
char
| -128 … 127
| нет
|
|
unsigned char
| 0 … 255
| нет
|
|
short int
| -32 768 … 32767
| нет
|
|
unsigned short int
| 0 … 65 535
| нет
|
|
int
| -2 147 483 648 … 2 147 483 647
| нет
|
|
unsigned int
| 0 … 4 294 967 295
| нет
|
|
float
| 3.4е-38 … 3.4е+38 (3.4×1038)
|
|
|
double
| 1.7е-308 … 1.7е+308
|
|
|
Необходимо иметь ввиду, что размер типа int не определяется стандартом, а зависит от компьютера и компилятора, например, на 16-разрядном процессоре под тип int отводится 2 байта, а на 32-разрядном – 4 байта.
Кроме перечисленных типов данных, к основным типам языка относится тип void, но множество значений этого типа пусто. Он используется для определения функций, которые не возвращают значения, для указания пустого списка аргументов функции и т.п.
Структура программы на языке С++
Программа на языке С++ состоит из функций, описаний и директив препроцессора. По крайней мере, даже самая маленькая программа должна иметь одну функцию main(), называемую главной функцией. Выполнение любой программы (консольной) начинается с первого оператора главной функции. Синтаксис функции имеет следующий формат:
тип_возвращаемого_значения ( параметры ) {
оператор; // комментарий в стиле С++
…
оператор; /* комментарий в стиле С */
}
Как видно из этого примера, функция состоит из операторов, которые являются указаниями компьютеру выполнить определённые программистом действия. Все операторы завершаются точкой с запятой (;).
Комментарии служат для предоставления более расширенной информации человеку, читающему код. Компилятор игнорирует всё, что помечено в программе как комментарий, поэтому комментарии никак не влияют на ход исполнения программы. Для пояснений рекомендуется использовать комментарии типа //, а для временного исключения блоков кода при отладке рекомендуется применять комментарии типа "скобки" /* */.
Рассмотрим в качестве примера линейную программу, которая переводит температуру в градусах по Фаренгейту в градусы Цельсия по формуле:
С = 5/9 (F - 32) , где С – температура по Цельсию, F – по Фаренгейту.
#include <iostream.h> // 0) директива препроцессора
#include <conio.h>
using namespace std;
//---------------------------------------------------------------------------
int main() { // 1) заголовок главной функции
float c, f; // 2) описание переменных
cout << "Vvedite temp. po Fahrengeitu: "; // 3) оператор вывода на экран
cin >> f; // 4) оператор ввода и присвоения значения переменной f
c = 5. * (f - 32) / 9 ; // 5) оператор-выражение
cout << "Temp. po Celsiu ravna " << c << endl; // 6)
cout << "\nPress any key to exit:";
getch();
return 0; // 7)
}
В начале программы записана директива препроцессора. Препроцессором называется предварительная фаза компиляции, то есть перевода программы с языка С++ на машинный язык. Директивами называются инструкции препроцессора. Таким образом, с помощью этой директивы к исходному тексту программы подключается заголовочный файл iostream.h, который содержит описания элементов стандартной библиотеки, необходимых для выполнения ввода-вывода в стиле С++ (вывод на экран cout<< и ввод с клавиатуры cin>>).
В стандартной библиотеке С++ существует множество заголовочных файлов. Использование тех или иных стандартных функций требует их включения в программу. В современном С++ заголовочные файлы не имеют расширения, но те файлы, которые были унаследованы от языка С, имеют расширение (*.h). Во избежание путаницы рекомендуется всегда указывать имя заголовочного файла с расширением (актуально для С++ Builder 5).
В заголовочном файле не должно быть определений функций и данных. Заголовочные файлы могут содержать:
- определение типов, констант, встроенных функций, шаблонов, перечислений;
- объявления функций, данных, имён, шаблонов;
- директивы препроцессора.
В операторе 2 определены две переменные для хранения в памяти двух значений: температуру по Фаренгейту и по Цельсию. При описании любой переменной нужно указывать её тип, чтобы компилятор знал, сколько выделить места в памяти, как интерпретировать её внутреннее представление, а также какие действия можно будет выполнять с этой величиной. Необходимо помнить, что для действий с целыми и вещественными величинами компилятором формируются различные наборы машинных команд.
В операторе 3 выполняется вывод на экран приглашения ввести значение температуры по Фаренгейту. С помощью оператора 4 происходит считывание введённого числа и передача его переменной f. В процессе ввода число преобразуется из последовательности символов, набранных на клавиатуре, во внутреннее представление вещественного числа и помещается в ячейку памяти, зарезервированную для переменной f (при её объявлении в операторе 2).
В операторе 5 вычисляется выражение, записанное справа от операции присваивания (=), и результат присваивается переменной c, т.е. заносится в отведённую этой переменной ячейку памяти ("присваивание – это передача данных налево"). Порядок вычисления выражения определяется приоритетом операций, принятым в математике.
7-ой оператор return 0; является указанием главной функции возвратить значение 0 (всё в порядке) компилятору или ОС. Можно и иначе записать главную функцию (в стиле С): void main(void) { … }.