Для того чтобы определить отправную точку выполнения, каждая программа на языке С++ должна содержать функцию с именем
main
. Эта функция по существу представляет собой именованную последовательность инструкций, которую компьютер выполняет в порядке перечисления. Эта функция состоит из четырех частей.
• Тип возвращаемого значения, в этой функции — тип
int
(т.е. целое число), определяет, какой результат возвращает функция в точку вызова (если она возвращает какое-нибудь значение). Слово
int
является зарезервированным в языке С++ (ключевым словом), поэтому его нельзя использовать как имя чего-нибудь еще (см. раздел А.3.1).
•
Имя, в данном случае
main
.
• Список параметров, заключенный в круглые скобки (см. разделы 8.2 и 8.6); в данном случае список параметров пуст.
• Тело функции, заключенное в фигурные скобки и перечисляющее действия (называемые инструкциями), которые функция должна выполнить.
Отсюда следует, что минимальная программа на языке С++ выглядит так:
int main { }
Пользы от этой программы мало, так как она ничего не делает. Тело функции
main
программы “Hello, World!” содержит две инструкции:
вызывается системой, мы не будем использовать возвращаемое значение. Однако в некоторых системах (в частности, Unix/Linux) это значение можно использовать для проверки успешности выполнения программы. Нуль (
0
), возвращаемый функцией
main
, означает, что программа выполнена успешно.
Часть программы на языке С++, определяющая действие и не являющаяся директивой
#include
(или другой директивой препроцессора; см. разделы 4.4 и А.17), называется инструкцией.
2.3. Компиляция
С++ — компилируемый язык. Это значит, что для запуска программы сначала необходимо транслировать ее из текстовой формы, понятной для человека, в форму, понятную для машины. Эту задачу выполняет особая программа, которая называется компилятором. То, что вы пишете и читаете, называется исходным кодом, или текстом программы, а то, что выполняет компьютер, называется выполняемым, объектным, или машинным кодом. Обычно файлы с исходным кодом программы на языке С++ имеют расширение
.cpp
(например,
hello_world.cpp
) или
.h
(например,
std_lib_facilities.h
), а файлы с объектным кодом имеют расширение
.obj
(в системе Windows) или
.o
(в системе Unix). Следовательно, простое слово код является двусмысленным и может ввести в заблуждение; его следует употреблять с осторожностью и только в ситуациях, когда недоразумение возникнуть не может. Если не указано иное, под словом код подразумевается исходный код или даже исходный код, за исключением комментариев, поскольку комментарии предназначены для людей и компилятор не переводит их в объектный код.
Компилятор читает исходный код и пытается понять, что вы написали. Он проверяет, является ли программа грамматически корректной, определен ли смысл каждого слова. Обнаружив ошибку, компилятор сообщает о ней, не пытаясь выполнить программу. Компиляторы довольно придирчивы к синтаксису. Пропуск какой-нибудь детали, например директивы
#include
, двоеточия или фигурной скобки, приводит к ошибке. Кроме того, компилятор точно так же абсолютно нетерпим к опечаткам. Продемонстрируем это рядом примеров, в каждом из которых сделана
небольшая ошибка. Каждая из этих ошибок является довольно типичной.
// пропущен заголовочный файл
int main
{
cout << "Hello, World!\n";
return 0;
}
Мы не сообщили компилятору о том, что представляет собой объект, поэтому он сообщает об ошибке. Для того чтобы исправить программу, следует добавить директиву
#include
.
#include "std_facilities.h"
int main
{
cout << "Hello, World!\n";
return 0;
}
К сожалению, компилятор снова сообщает об ошибке, так как мы сделали опечатку в строке
std_lib_facilities.h
. Компилятор заметил это.
#include "std_lib_facilities.h
int main
{
cout << "Hello, World!\n;
return 0;
}
В этом примере мы пропустили закрывающую двойную кавычку (
"
). Компилятор указывает нам на это.
#include "std_lib_facilities.h"
integer main
{
cout << "Hello, World!\n";
return 0;
}
Теперь мы вместо ключевого слова
int
использовали слово
integer
, которого в языке С++ нет. Компилятор таких ошибок не прощает.
#include "std_lib_facilities.h"
int main
{
cout < "Hello, World!\n";
return 0;
}
Здесь вместо символов
<<
(оператор вывода) использован символ
<
(оператор “меньше”). Компилятор это заметил.
#include "std_lib_facilities.h"
int main
{
cout << 'Hello, World!\n';
return 0;
}
Здесь вместо двойных кавычек, ограничивающих строки, по ошибке использованы одинарные. Приведем заключительный пример.
#include "std_lib_facilities.h"
int main
{
cout << "Hello, World!\n"
return 0;
}
В этой программе мы забыли завершить строку, содержащую оператор вывода, точкой с запятой. Обратите внимание на то, что в языке С++ каждая инструкция завершается точкой с запятой (
;
). Компилятор распознает точку с запятой как символ окончания инструкции и начала следующей. Трудно коротко, неформально и технически корректно описать все ситуации, в которых нужна точка с запятой.