Функция main и код возврата
Программу часто запускает не человек, а другая программа — например, скрипт или система проверки задач. Запускающей программе нужно узнать, удачно ли отработала запущенная, а разбирать для этого её вывод неудобно.
Представьте курьера, который вернулся с доставки. Диспетчеру не нужен его рассказ о дороге: хватит отметки в накладной — доставлено или нет. У программы есть такая же отметка, только это число. Поэтому main возвращает число:
#include <iostream>
int main() {
std::cout << "Done\n"; // Done
return 0;
}Давайте разберём тело main по строкам:
std::cout << "Done\n";печатаетDone.return 0;завершаетmainи отдаёт число0тому, кто запустил программу.
Код возврата
int перед main — тип результата: функция возвращает целое число. Инструкция return 0; завершает main, и 0 становится кодом возврата программы. Его получает тот, кто программу запустил. По соглашению 0 означает успех, а любое другое число — сбой.
Здесь аналогия с накладной заканчивается: в отметке нет слов, только число, и что значит каждое число, кроме 0, решает автор программы.
Код возврата не попадает в вывод: return 0; ничего не печатает. Увидеть его можно так:
- в Visual Studio после завершения программы в окне консоли появляется строка, в которой есть
exited with code 0; - в терминале Linux или macOS его показывает команда
echo $?.
return срабатывает сразу: инструкции, которые стоят в main после него, уже не выполняются.
Выход без return
Из функций, которые возвращают значение, только main может обойтись без return. Если выполнение дошло до закрывающей скобки main, программа возвращает 0, как после return 0;. Так работает программа с Hello, world: return в ней нет, а код возврата — 0. Поэтому return 0; в конце main часто не пишут.
В любой другой функции, которая возвращает значение, такой выход — неопределённое поведение: стандарт C++ не говорит, что тогда произойдёт. Компилятор при этом выдаёт предупреждение.
Частая ошибка
Здесь перед main стоит void — «нет результата» — вместо int:
#include <iostream>
void main() { // ✗
std::cout << "Done\n";
}error: 'main' must return 'int'Стандарт C++ требует, чтобы main возвращала int, поэтому clang и GCC такую программу не компилируют.
Главное
mainвозвращаетint— код возврата программы;0по соглашению означает успех.returnсразу завершает функцию: инструкции после него не выполняются.- Если
mainдошла до закрывающей скобки безreturn, программа возвращает0. - В другой функции, которая возвращает значение, выход без
return— неопределённое поведение.
Подпишись, чтобы пройти курс
Курс бесплатный. Войди через Telegram и подпишись на канал — откроются все уроки.