Откройте в Visual C++ 2008 Express Edition решение, которое мы создали в предыдущей статье. В обозревателе решенией выберите файл исходного кода hello world.cc.

Рассмотрим следующую программу на C++. Всё что делает программа - печатает строку "Hello world!!!" на экране монитора.

код на языке c++
// Моя первая программа!!!

#include <iostream>
#include <conio.h>

using namespace std;

int main ()
{
  cout << "Hello world!!!\n";
  _getch();
  return 0;
}

Теперь рассмотрим отдельные части программы и что они делают.

Комментарии

// Моя первая программа!!!

Первая строка является комментарием и компилятор не обращает на неё внимания. Компилятор различает комментарии благодаря знаку двойной косой черты // . Такие комментарии действительны до конца строки.

Существует ещё один способ закомментировать текст: /* */. Работает он следующим образом:

/* Первая строка комментария
...
Компилятор не обращает на все эти строки внимания
...
Последняя строка комментария */

Комментарии обычно используются для пояснений. Вообще, они очень полезны в больших программах над которыми ведётся работа не один месяц. Иногда бывает полезно закомментировать какую-то часть кода, например, когда ищут ошибку.

Директивы
После комментария в программе "Hello world" следуют две строки #include:

код на языке c++
#include <iostream>
#include <conio.h>

Знак # указывает на то, что данная строка является директивой препроцессора, а ключевое слово include (include - включать) говорит компилятору, что нужно добавить файлы iostream и conio.h вместо соответствующих строк. Поясню на примере. Допустим у нас есть два файла:

файл 1.txt
текст первого файла

Файл 2.txt
#include <Файл 1.txt>
текст второго файла

Прежде чем начать компилирование, препроцессор подставляет вместо #include <Файл 1.txt> содержимое первого файла. В итоге второй файл выглядит так:

файл 2
текст первого файла
текст второго файла

Кроме include, существуют другие директивы препроцессора. Директива препроцессора #define MY_CONSTANT 1 указывает компилятору заменить в программе все встречающиеся MY_CONSTANT на единицу. Подробнее о данной директиве мы поговорим позже.

Препроцессор же - это специальная часть компилятора которая обрабатывает свои директивы перед началом компиляции программы.

В примере выше я использовал простые текстовые файлы (.txt). Обычно с помощью include вставляют специальные файлы - заголовочные (header files; header - заголовок). Стандартные заголовочные файлы С++ не имеют расширения, а файлы с расширением .h - унаследованы от языка С.

В файле iostream содержится определения объекта cout, который мы будем использовать для вывода данных на экран монитора.

В файле conio.h содержится определение функции _getch().

Дальше идёт директива using namespace, Это уже не директива препроцессора! Подробнее о назначении данной директивы и простанствах имён мы будем говорить позже, когда будем рассматривать многофайловые программы. Если просто, то данная директива нам нужна чтобы мы могли использовать фунции из файлов conio.h и iostream в наших программах.

Функция main()
Одним из основных понятий в любом языке программирования является функция.

Знакомство с функциями начинается с главной фунции любой программы - main().

Прежде чем использовать функцию, её нужно определить. Определение функции включает в себя: заголовок функции и тело функции.

Заголовок функции состоит из имени функции, в данном случае - main, после которого должны стоять скобки. Слово стоящее до имени фунции говорит о том, какого типа данные вернёт функция. В нашем случае, main() должна вернуть целое число (integer - целое число).

Тело функции начинается сразу после заголовка и заключено в фигурные скобки {}. Тело функции состоит из операторов. Операторы - это указания процессору (не компилятору!) выполнить какое-либо действие. Процессор - та самая железяка внутри компьютера.

В нашей программе три оператора:

код на языке c++
cout << "Hello world!!!\n";
_getch();
return 0;

Обычно каждый оператор располагается в одной строке. И хотя это необязательно, я рекомендую вам всегда размещать каждый оператор в отдельной строке.

Каждый оператор заканчивается точкой с запятой - ;. Это обязательно. Не забывайте.

Следующая строка:

cout << "Hello world!!!\n";

Данный оператор выводит на экран текст. Операция << называется - операцией вставки и копирует то что находится справа в левую часть. То есть "Hello world!!!\n" копируется в cout.

cout - это объект (с объектами мы тоже познакомимся позже:)) предназначенный для работы со стандартным потоком вывода. Пока просто считайте, что он выводит текст на экран.

"hello world!!!\n" является строковой константой. Строковой - потому что - это строка текста. Константой - потому, что данная строка не меняет своего значения.
Отличительной чертой строковой константы являются двойные кавычки. Теперь, думаю, стоит разобраться с \n ? Последовательность символов \n, помещённая в строку или в строковую константу, говорит о том, что следующие символы будут выведены с новой строки. Именно благодаря этому символу курсор консоли в нашей программе находится на следующей строке после текста "hello world". Т.е. \n - это перевод курсора на следующую строку.

\n - это пример управляющей последовательности (escape-sequence). Отличительной чертой управляющей последовательности служит обратная косая черта "\". Существуют разные управляющие последовательности: \n \r \t \\ \". Но о них мы поговорим немного позже.

Наш оператор, как и положено заканчивается точкой с запятой.

Следующий оператор:

_getch();

В данной строке вызывается функция _getch(). Эта функция просит чтобы пользователь нажал клавишу клавиатуры. Причём после ввода, символ не отображается на экране.

Еслы бы не было этого оператора, то мы бы ничего не успели заметить: наша программа бы запустилась, напечатала сообщение и сразу же закрылась. А с данным оператором, программа ждёт, чтобы пользователь нажал любую клавишу.

_getch - это функция и перед тем как её использовать, её нужно определить (как функцию main()), за нас уже это сделали и мы её можем спокойно использовать. Но чтобы компилятор знал, что функция определена, нужно добавить к нашей программе заголовочный файл - conio.h.

Использовать функции очень легко. Да Вы, наверное, это и без меня заметили: нужно написать имя функции, скобки и закончить оператор точкой с запятой.

И последний оператор:

return 0;

Этот оператор обязателен для определения любой функции и main() не исключение. Благодаря этому оператору функция "возвращает" значение (в данном случае ноль) операционной системе или компилятору (если идёт отладка (debugging) приложения).

*Всего лишь одна программа, а сколько информации! Но, пока что Вы должны уяснить только следующее:
-В любой программе обязательно должна присутствовать функция main().
-Перед тем как использовать любую функцию, её нужно определить.
-Определение функции состоит из заголовка и тела. Тело функции заключено в фигурные скобки {}.
-Тело функции состоит из операторов. Каждый оператор - это команда для процессора. Операторы отделяются друг от друга точкой с запятой.
-Чтобы использовать функцию, её нужно вызвать. Мы не можем увидеть вызов main(), за нас этот вызов делает операционная система или компилятор. Любые другие функции Вы должны вызывать в ваших программах сами.