Служат для указания действий над операндами. В зависимости от количества операндов в C++ имеются унарные, бинарные и одна тернарная операции. Знаки операций могут изображаться одним или несколькими символами. Если операция содержит в своем изображении несколько символов, то между символами не должно быть пробелов. Некоторые операции в C++ в зависимости от контекста могут выполнять разные действия. Большинство стандартных операций можно переопределять (перегружать).
Константы – это данные, значения которых не могут меняться в процессе работы программы. Подробно синтаксические правила записи различных констант будут рассмотрены при изучении соответствующих типов данных. Сейчас только одно замечание по поводу использования алфавита языка при формировании строковых (текстовых) констант: в них можно использовать не только символы алфавита языка C++, но и все другие символы, имеющиеся в используемой таблице символов (символы национальных алфавитов, символы псевдографики и т.д.).
Комментарии – это фрагменты текста, игнорирующиеся компилятором при обработке текста программы. Комментарии в текстах программ используются для различных пояснений к тексту программы, а также для исключения временно не нужных фрагментов текста программы (например, отладочных кодов или вариантов реализации).
В C++ имеются комментарии двух видов: однострочные и многострочные.
Однострочный комментарий начинается двумя символами // (прямой косой черты) и заканчивается в конце строки текста программы.
Многострочный комментарий – начинается символами /* и заканчивается */ и может содержать множество строк. Многострочные комментарии не могут вкладываться друг в друга. Однострочные комментарии могут находиться внутри многострочных комментариев.
Любая C++ программа представляет собой одну или несколько функций. Вот пример простой программы с одной функцией, обеспечивающей вывод некоторого текста в консольное окно:
#include <iostream>
{
cout << "Это пример программы на языке C++" << endl;
}
Это исходный код программы (исходный код – это текст, написанный на одном из языков высокого уровня – в данном случае – на языке C++). Его нельзя выполнить. Для выполнения программы с помощью компилятора надо получить результирующую программу (объектный код).
Таким образом, необходимо выполнить следующие действия:
1. написать текст программы (создать исходный код);
2. откомпилировать этот текст (получить объектный код результирующей программы);
3. выполнить результирующую программу.
Особенности выполнения этих действий существенно зависят от используемой системы программирования.
Программа, приведенная выше, имеет несколько недостатков:
1. При ее выполнении в большинстве случаев (в зависимости от используемой среды программирования) невозможно увидеть результат ее работы;
2. Выведенный в консольное окно текст на русском языке будет нечитабельным.
Вот второй вариант этой же программы, лишенный этих недостатков:
#include <iostream> /* Директива препроцессору включить в текст заголовочный файл библиотеки классов C++ для управления вводом – выводом */
using namespace std;/*Директива компилятору использовать пространство имен std стандартной библиотеки С++ */
int main() // Основная функция программы – начало выполнения программы
{
setlocale(0, ""); // Установка локальных настроек на вывод русского текста
cout << "Это пример программы на языке С++" << endl; // Вывод на экран
system("Pause"); // Приостановка выполнения программы
return 0; // Выход из функции и из программы
}
А вот пример более сложной программы, содержащей две функции:
#include <iostream>
using namespace std;
{
int c = a + b;
}
{
setlocale(0, "");
cout << "5 + 7 = " << sum(5, 7) << endl;
system("Pause");
}
Более интересный вариант этой же программы, выполняющий сложение любых целых чисел, введенных с клавиатуры:
При желании исходный текст программ можно вводить с помощью любого текстового редактора (например, с помощью Блокнота или WordPad) и обязательно сохранять его именно в текстовом формате без информации форматирования. Дело в том, что информация о форматировании помешает работе C++ - компилятора.
Имя файла, который будет содержать исходный код программы, формально может быть любым. Но С++ - программы обычно хранятся в файлах с расширением .срр. Поэтому называть исходные тексты С++ - программ можно любыми именами, но в качестве расширения следует использовать .срр. Например, назвать предыдущую программу можно, например, MyProg.срр.
Что необходимо сделать для того, чтобы выполнить трансляцию программы и выполнить ее? Конкретные действия зависят от используемой системы программирования.
Способ компиляции программ зависит от используемого компилятора и выбранных опций. Более того, многие компиляторы, например Visual С++ (Microsoft) и С++ Builder (Borland), предоставляют два различных способа компиляции программ: с помощью компилятора командной строки и интегрированной среды разработки (Integrated Development Environment — IDE). Поэтому для компилирования С++ - программ невозможно дать универсальные инструкции, которые подойдут для всех компиляторов.
Поскольку самыми популярными компиляторами являются Visual С++ и С++ Builder, здесь приведены инструкции по компиляции программ, соответствующие этим компиляторам.
Чтобы скомпилировать программу MyProg.срр, используя Visual С++ компилятор командной строки, необходимо ввести следующую командную строку:
C:\...>cl -GX MyProg.срр
Чтобы скомпилировать программу MyProg.срр, используя С++ Builder, необходимо ввести такую командную строку:
С: \...>bcc32 MyProg.срр
В результате работы С++-компилятора получается выполняемый объектный код. Для Windows-среды выполняемый файл будет иметь то же имя, что и исходный, но другое расширение, а именно расширение .exe. Итак, выполняемая версия программы MyProg.срр будет храниться в файле MyProg.ехе.
При использовании интегрированных сред разработки (IDE) соответствующие действия выполняются с помощью соответствующих команд меню.
Скомпилированная программа готова к выполнению. Поскольку результатом работы C++ компилятора является выполняемый объектный код, то для запуска программы MyProg.ехе необходимо выполнить командную строку:
С:\...>MyProg.exe
Если используется интегрированная среда разработки, то выполнить программу можно путем выбора из меню команды Run (Выполнить). При выполнении этой команды осуществляется автоматическая компиляция программы и, при отсутствии ошибок, программа запускается на выполнение.
Основным назначением компилятора (транслятора) является перевод исходного текста программы, написанного на языке программирования понятного человеку, на язык, понятный процессору — в машинные коды. Этот процесс состоит из нескольких этапов. Рисунок иллюстрирует эти этапы для языка С++.
Сначала программа передается препроцессору, который выполняет директивы, содержащиеся в ее тексте (например, включение в текст так называемых заголовочных файлов — текстовых файлов, в которых содержатся описания используемых в программе элементов).
Получившийся полный текст программы поступает на вход компилятора, который выделяет лексемы, а затем на основе грамматики языка распознает выражения и операторы, построенные из этих лексем. При этом компилятор выявляет синтаксические ошибки и в случае их отсутствия строит объектный модуль.
Компоновщик, или редактор связей, формирует исполняемый модуль программы, подключая к объектному модулю другие объектные модули, в том числе содержащие функции библиотек, обращение к которым содержится в любой программе (например, для осуществления вывода информации на экран). Если программа состоит из нескольких исходных файлов, они компилируются по отдельности и объединяются на этапе компоновки. Исполняемый модуль имеет расширение .exe и может быть запущен на выполнение обычным образом.
При разработке программ возникают ошибки трех видов:
1. Синтаксические ошибки - нарушения синтаксиса (то есть грамматических правил) языка программирования, например, пропущена точка с запятой;
2. Ошибки периода выполнения – возникающие только при работе программы (например, деление на 0);
3. Логические ошибки – ошибки исходного алгоритма (например, вместо операции + ошибочно использована операция *).
Исходный текст программы (.cpp)
Препроцессор
Полный текст (.cpp)
Компилятор
Объектный код (.obj)
Компоновщик
Исполняемая программа (.exe)
Включаемые файлы (.h)
Библиотечные модули
При компиляции программ, содержащих синтаксические ошибки, компилятор все их обнаружит и выдаст соответствующие сообщения об ошибках и покажет приблизительное место каждой из них. Однако эти сообщения не всегда точно отражают смысл и положение синтаксической ошибки в исходном тексте.
Ошибки периода выполнения обнаруживаются только при выполнении программы – эти ошибки, как правило, приводят к аварийному завершению работы программы с выдачей соответствующего сообщения.
Логические ошибки компилятором и исполняющей системой компьютера не обнаруживаются и могут привести к непредсказуемому поведению программы. Обнаружить такие ошибки можно только путем анализа результатов работы программы на различных наборах тестовых данных, но и в этом случае 100% уверенности в правильности работы программы никогда нельзя дать.