С чего начать изучение C++: пошаговая инструкция по установке компилятора и среды разработки, написание первой программы, разбор ошибок компиляции и запуск кода. Для начинающих — просто, понятно, с практикой.
Представь, что ты садишься за руль машины с механической коробкой передач. Сначала всё непривычно. Педали, рычаг, сцепление. Можно заглохнуть на светофоре. Но когда освоишь — чувствуешь полный контроль над дорогой. Автомат проще, но механика учит понимать, что происходит под капотом. C++ — это механика. Python и JavaScript — автомат. И сегодня ты заведёшь этот мотор.
Содержание
- Инструменты: что нужно установить
- Первая программа: Hello, World!
- Что происходит под капотом: препроцессор, компилятор, линковщик
- Компиляция и запуск
- Типичные ошибки новичков и как их читать
- Базовый ввод и вывод: делаем программу интерактивной
- Что дальше: план изучения C++
- Шпаргалка: основные команды и понятия первого урока по C++
- Полная шпаргалка: команды, ошибки, анатомия программы
- Заключение
Игры, браузеры, операционные системы, высоконагруженные серверы — всё это пишут на C++. Не потому что других языков нет. Потому что C++ даёт контроль над каждой инструкцией, которую выполняет процессор. Это язык, на котором создают то, что должно работать быстро и без компромиссов.
Многие боятся C++. Говорят, он сложный. Говорят, там ручное управление памятью и можно всё сломать. Это правда. Но правда и в другом. C++ требует внимательности, но зато даёт точные подсказки, где именно ошибка. Красным текстом. С номером строки. Осталось только научиться читать эти сообщения. И ты научишься. Прямо сегодня.
Ты уже освоил терминал и Git. Умеешь перемещаться по файловой системе и управлять версиями кода. Теперь пора писать код, который делает что-то полезное. К концу этой статьи ты установишь компилятор, напишешь первую программу, запустишь её, поймёшь, как читать ошибки компиляции, и добавишь программе интерактивности. Это не магия. Это навык. И он даётся быстрее, чем кажется.
Инструменты: что нужно установить
Для работы с C++ нужны две вещи. Компилятор — он переводит твой код в машинные инструкции. И редактор кода — в нём ты этот код пишешь. Компилятор — это переводчик. Редактор — это умный блокнот с подсветкой и подсказками. Можно писать код хоть в Блокноте и компилировать в терминале. Но умный блокнот ускоряет работу в разы.
В качестве редактора мы возьмём Visual Studio Code. Он бесплатный, работает на Windows, macOS и Linux, и у него огромный выбор расширений. После установки VS Code добавь расширение C/C++ от Microsoft — оно даст подсветку синтаксиса, автодополнение и удобный запуск.
C++ можно компилировать разными инструментами. Кроме GCC (g++) существуют Clang (clang++) и Microsoft Visual C++ (MSVC). Для обучения разница между ними не критична — синтаксис C++ един. Мы используем g++ потому, что он доступен на всех платформах и работает одинаково.
Теперь компилятор. Выбор зависит от твоей операционной системы.
Windows (рекомендуемый путь — MSYS2):
- Скачай установщик с msys2.org и установи его.
- Открой «MSYS2 UCRT64» из меню Пуск и введи:
pacman -S mingw-w64-ucrt-x86_64-gcc - Добавь
C:\msys2\ucrt64\binв переменную окружения PATH. Проверь:g++ --version
Если у тебя уже установлен winget, можно проще: winget install g++.
macOS:
- Открой терминал и введи:
xcode-select --install - Дождись установки Command Line Tools.
- Проверь:
g++ --version
На macOS команда g++ вызывает компилятор на базе clang. Это не влияет на обучение: синтаксис C++ и флаги компиляции остаются одинаковыми. Проверить, какой именно компилятор используется, можно командой g++ --version.
Linux (Debian/Ubuntu):
- Открой терминал и введи:
sudo apt update && sudo apt install g++ - Дождись установки.
- Проверь:
g++ --version
Альтернативные способы установки: на macOS можно использовать Homebrew: brew install gcc. На Linux — snap: snap install gcc. Но рекомендуемый путь в этой статье — стандартные инструменты системы. Они точно будут работать.
g++. Если после установки терминал пишет «'g++' is not recognized» — перезапусти терминал. Не помогло — проверь PATH. Введи echo %PATH% (Windows) или echo $PATH (macOS/Linux) и убедись, что путь к компилятору там есть. На macOS инструменты командной строки обычно лежат в /usr/bin или /Library/Developer/CommandLineTools/usr/bin/. Если после установки Xcode терминал не находит g++, проверь, что один из этих путей присутствует в $PATH.
Если что-то пошло не так при установке:
- Windows: антивирус может блокировать установку MSYS2. Временно отключи его или добавь установщик в исключения.
- macOS: ошибка «xcode-select: command not found» означает, что Command Line Tools не установлены. Повтори шаг 1.
- Linux: ошибка «E: Unable to locate package g++» лечится командой
sudo apt updateперед установкой.
g++ --version. Сделай скриншот успешного вывода — это твоё доказательство, что всё работает.
Первая программа: Hello, World!
Хватит подготовки. Давай напишем код. Открой VS Code, создай новый файл hello.cpp и набери следующее:
#include <iostream>
int main() {
std::cout << "Hello, World!" << std::endl;
return 0;
}
Не копируй. Набери руками. Это важно — мышечная память начинает работать с первых строк. А теперь разберём каждую строчку. Потому что даже в этой маленькой программе скрыто много смысла.
#include <iostream> — директива препроцессора. Она подключает библиотеку ввода-вывода. Библиотека — это набор готового кода, который ты можешь использовать. iostream расшифровывается как input-output stream. Без неё программа не знает, как выводить текст на экран. Это как розетка: пока не воткнул вилку, электричество не пойдёт.
Пустая строка не влияет на код. Она отделяет подключение библиотек от самой программы. Читаемость — это важно.
int main() — точка входа. Операционная система начинает выполнение программы именно с этой функции. int означает, что функция возвращает целое число. Каждая программа на C++ обязана иметь функцию main. Без неё ОС не поймёт, с чего начинать.
{ — открывающая фигурная скобка. Начало тела функции. В C++ блоки кода обрамляются фигурными скобками, а не отступами как в Python. Отступы тут для красоты, скобки — для компилятора.
std::cout << "Hello, World!" << std::endl; — главная строка. Разберём по частям. std::cout — объект для вывода в консоль, живёт в пространстве имён std. << — оператор передачи данных, работает как стрелка: данные текут в сторону cout. "Hello, World!" — строковый литерал, текст, который мы выводим. std::endl — переводит курсор на новую строку, сокращение от end line. Точка с запятой в конце обязательна — она завершает оператор, как точка завершает предложение.
return 0; — возвращаем ноль операционной системе. Ноль означает «всё хорошо». Любое другое число — «произошла ошибка».
} — закрывающая фигурная скобка. Конец тела функции.
main() без явного return, компилятор автоматически подставляет return 0;. Писать его не обязательно. Но в этом туториале мы будем писать явно — для наглядности и чтобы выработать привычку возвращать значение из функций.
hello.cpp — правильно, привет.cpp — неправильно. Некоторые компиляторы некорректно обрабатывают пути с кириллицей. В строках кода русский текст обычно работает, но вывод в консоль может отображаться некорректно из-за кодировки терминала. Если вместо текста видишь кракозябры — это проблема кодировки, а не синтаксиса. Для первых примеров лучше использовать английский текст.
std::cout << "Привет, я Алекс!" << std::endl;. Сохрани файл как hello.cpp.
std::endl? Чем его можно заменить?
Даже в трёх строках кода скрыто много смысла — директива include, функция main, вывод в консоль и возврат значения
Что происходит под капотом: препроцессор, компилятор, линковщик
Прежде чем запускать программу, давай разберёмся, как твой код превращается в исполняемый файл. Это не магия, а три последовательных этапа. Представь завод.
Препроцессор — отдел закупок. Он обрабатывает директивы, которые начинаются с решётки. Когда ты пишешь #include <iostream>, препроцессор берёт содержимое файла iostream и вставляет его на место этой строки. Буквально копирует тысячи строк библиотечного кода в твой файл. Ты этого не видишь, но это происходит.
Компилятор — станок. Он берёт код, прошедший через препроцессор, и переводит его в объектный код. Это промежуточное представление на машинном языке — единицы и нули, которые понимает процессор. На этом этапе проверяется синтаксис. Если ты забыл точку с запятой, компилятор скажет об этом.
Линковщик — сборочный цех. Он берёт все объектные файлы и собирает их в один исполняемый файл. Связывает вызовы функций с их определениями. Если ты использовал std::cout, линковщик найдёт реализацию cout в стандартной библиотеке и подключит её.
Почему это важно знать? Когда ты увидишь ошибку «undefined reference», ты будешь знать — это проблема на этапе линковки. А ошибка «expected ';'» — на этапе компиляции. Понимание этапов помогает быстро находить источник проблемы.
Три этапа превращают твой код в программу, которую понимает процессор
Компиляция и запуск
Теории было достаточно. Давай запустим программу. Мы будем использовать терминал — ты освоил его в первой статье серии, и теперь он пригодится. Открой терминал в папке с файлом hello.cpp. Для этого перейди в нужную папку через cd путь/к/папке.
Компиляция — одна команда:
g++ hello.cpp -o hello
Разберём: g++ — вызов компилятора. hello.cpp — исходный файл. -o hello — флаг -o (output) задаёт имя выходного файла. Если опустить -o hello, компилятор назовёт файл a.out на Linux/macOS или a.exe на Windows. Имя по умолчанию зависит от операционной системы, поэтому лучше всегда указывать -o с понятным именем — так ты точно будешь знать, какой файл запускать.
Если терминал молча отработал — компиляция прошла успешно. Запускаем:
./hello # Linux/macOS
hello.exe # Windows
Ты увидишь: Hello, World! Поздравляю. Ты только что написал и запустил свою первую программу на C++.
Для тех, кто хочет больше контроля, есть дополнительные флаги. -Wall включает все предупреждения (Warnings all) — компилятор будет сообщать о подозрительных местах, даже если формально код корректен. -std=c++17 указывает стандарт языка. Полная команда для осознанной компиляции выглядит так:
g++ -Wall -std=c++17 hello.cpp -o hello
- Проверь, что компилятор установлен:
g++ --version - Проверь PATH:
echo $PATH(macOS/Linux) илиecho %PATH%(Windows) - Проверь, что ты в той же папке, что и файл:
pwd(Linux/macOS) илиcd(Windows) - Проверь имя файла:
ls(Linux/macOS) илиdir(Windows) - Перезапусти терминал — иногда этого достаточно
g++ исходник.cpp -o программа компилирует код в исполняемый файл. Без -o файл назовётся a.out или a.exe. Флаги -Wall и -std=c++17 помогают писать современный и безопасный код.
hello.cpp. Потом переименуй вывод через -o myhello и запусти снова. Попробуй с флагом -Wall — увидишь разницу в выводе.
-o hello? Как будет называться исполняемый файл на твоей операционной системе?
Типичные ошибки новичков и как их читать
Ошибки компилятора — это подсказки, а не наказание. Компилятор говорит: «Я не понимаю эту строку, проверь её». Каждое сообщение содержит имя файла, номер строки, тип ошибки и описание. Научись читать эти сообщения — и ты перестанешь бояться красного текста.
Вот пример сообщения об ошибке. Разберём его по частям:
hello.cpp:5:12: error: expected ';' before 'return'
5 | std::cout << "Hello!" << std::endl
| ^
| ;
hello.cpp:5:12 — файл, строка 5, позиция 12. error: — это критическая ошибка, без исправления программа не скомпилируется. expected ';' before 'return' — компилятор ожидал точку с запятой перед return. Стрелка и подсказка показывают точное место проблемы.
Теперь разберём конкретные ошибки. Каждую ты встретишь в первые недели программирования.
Ошибка 1: пропущена точка с запятой. Компилятор: g++ (GCC) на Linux / macOS / Windows. В других компиляторах формулировка может немного отличаться, но суть та же.
std::cout << "Hello!" << std::endl // нет ;
Сообщение: error: expected ';' before 'return'. Как исправить: добавить ; в конец строки. C++ требует точку с запятой после каждого оператора. Это как точка в предложении — без неё непонятно, где заканчивается одна мысль и начинается другая.
Ошибка 2: забыли std::.
cout << "Hello!" << endl; // без std::
Сообщение: error: 'cout' was not declared in this scope. Как исправить: добавить std:: перед cout и endl. cout и endl живут в пространстве имён std. Это как фамилия — без неё непонятно, о каком именно cout речь. В стандартной библиотеке C++ все имена находятся в пространстве std.
Ошибка 3: нет функции main. Ошибка возникает на этапе линковки.
#include <iostream>
// функция main отсутствует
Сообщение: undefined reference to 'main'. Как исправить: добавить int main() { ... }. Операционная система ищет main как точку входа. Без неё непонятно, с чего начинать выполнение.
Ошибка 4: неправильное имя файла при компиляции.
g++ hello.cppp -o hello # опечатка в расширении
Сообщение: error: hello.cppp: No such file or directory. Как исправить: проверить имя файла. Используй Tab для автодополнения — это спасёт от опечаток.
Ошибка 5: не закрыта кавычка.
std::cout << "Hello!; // нет закрывающей кавычки
Сообщение: error: missing terminating " character. Как исправить: добавить закрывающую кавычку. Компилятор ищет пару для каждой кавычки. Если кавычка не закрыта, он считает строкой весь дальнейший код — и теряется.
Ошибка 6: не закрыта фигурная скобка.
int main() {
std::cout << "Hello!";
return 0;
// нет закрывающей }
Сообщение: error: expected '}' at end of input. Как исправить: добавить } в конец файла. Каждая { должна иметь парную }. Компилятор дошёл до конца файла и не нашёл закрывающую скобку.
expected ';' — пропущена точка с запятой. not declared in this scope — забыл std::. undefined reference to 'main' — нет функции main. No such file or directory — опечатка в имени файла. Читай ошибки внимательно — они говорят, что именно не так.
std::cout << Hello; (без кавычек)?
Ошибки — это подсказки компилятора, а не повод для паники
Базовый ввод и вывод: делаем программу интерактивной
Программа, которая просто выводит текст — это скучно. Давай добавим взаимодействие. Программа спросит имя и поздоровается лично.
#include <iostream>
#include <string>
int main() {
std::string name;
std::cout << "Как тебя зовут? ";
std::cin >> name;
std::cout << "Привет, " << name << "!" << std::endl;
return 0;
}
Разберём новые элементы. #include <string> — подключаем библиотеку для работы со строками. std::string name; — объявляем переменную name типа «строка». Переменная — это контейнер для данных. std::cin >> name; — ввод с клавиатуры. std::cin читает введённый текст до первого пробела и сохраняет в переменную name. Оператор >> направляет данные из cin в переменную. "Привет, " << name << "!" — склеиваем несколько фрагментов в один вывод. Можно комбинировать текст и переменные.
Важное замечание: std::cin >> читает только одно слово — до пробела. Если пользователь введёт «Анна Мария», в name попадёт только «Анна». Для чтения целой строки используется std::getline(std::cin, name);. Она живёт в той же библиотеке <string>, которую мы уже подключили — добавлять новый #include не нужно. Это тема следующей статьи.
std::cin позволяет программе принимать ввод от пользователя. Переменные хранят данные. std::string — тип для текста. Оператор << склеивает фрагменты вывода. std::cin >> читает одно слово до пробела.
cin: один для имени, второй для возраста. Именно поэтому ввод «Иван 25» сработает: первый cin берёт слово до пробела, второй — следующее слово. Это не магия, а логика работы оператора >>.
name после выполнения std::cin >> name;, если пользователь ввёл «Иван Петров»?
Что дальше: план изучения C++
Ты написал и запустил первую программу. Научился читать ошибки компилятора. Добавил программе интерактивности. Это база. Дальше — больше.
Ближайшие темы:
- Переменные и типы данных:
int,double,char,bool,std::string. - Управляющие конструкции:
if/else,for,while. - Функции: как писать свои функции и разделять код на файлы.
- Указатели и работа с памятью — но это сильно потом, когда будет база.
Настройка VS Code для удобной работы. Расширение C/C++ уже установлено. Чтобы собирать проект по Ctrl+Shift+B: нажми Ctrl+Shift+B, выбери «Configure Build Task», затем g++. VS Code создаст файл .vscode/tasks.json с настройками сборки. Подробнее — в документации Microsoft по настройке C++ в VS Code.
using namespace std; в начале программы. Она позволяет писать cout вместо std::cout. Экономит несколько символов, но в реальных проектах так делать не принято. Причина: пространство имён std огромно, и using namespace std; «вываливает» все его имена в твой код. Если среди них окажется имя, которое ты уже использовал — возникнет конфликт. В учебных целях это допустимо, но мы будем использовать std:: — это дисциплинирует и готовит к работе с реальным кодом.
Система сборки — это не страшно. Одна строчка, и компилятор знает, что делать
Полезные ресурсы:
- Официальная справка cppreference по iostream, string и другим библиотекам C++
- LearnCpp.com — подробный туториал для начинающих с примерами
- Документация Microsoft по настройке C++ в VS Code
Следующая статья по плану: «Docker для разработчика: как упаковать приложение и запустить локально». Docker пригодится C++ разработчику для создания воспроизводимого окружения: твоя программа будет собираться и работать одинаково на любой машине, независимо от версий компилятора и библиотек. Это следующий уровень контроля над окружением.
Шпаргалка: основные команды и понятия первого урока по C++
Сохрани эту шпаргалку. В первые недели она выручит тебя при компиляции и поиске ошибок. Команды сгруппированы по задачам: сначала компиляция, потом синтаксис, потом запуск.
g++g++ main.cpp -o programg++ -og++ main.cpp -o myappg++ -Wallg++ -Wall main.cpp -o myappg++ -std=c++17g++ -std=c++17 main.cpp -o myappg++ --versiong++ --version#include#include <iostream>int main()int main() { ... }std::coutstd::cout << "Hello";std::cinstd::cin >> переменная;std::endlstd::cout << std::endl;\nstd::cout << "Hello!\n";std::stringstd::string name = "Анна";<<std::cout << данные;>>std::cin >> данные;return 0return 0;./program./helloprogram.exehello.exe;g++ файл.cpp -o программа#include и другие директивыТак выглядит минимальный проект на C++ — один исходный файл и система сборки
Полная шпаргалка: команды, ошибки, анатомия программы
Эта шпаргалка — расширенная версия. Здесь собрано всё, что ты узнал из статьи: команды компиляции, типичные ошибки, анатомия Hello World и ввод-вывод. Мы подготовили её в формате PDF — скачай по кнопке в конце статьи и держи под рукой.
Часть 1: Команды g++
g++ файл.cpp -o имяg++ hello.cpp -o hellog++ -Wallg++ -Wall hello.cpp -o hellog++ -std=c++17g++ -std=c++17 hello.cpp -o hellog++ --versiong++ --version./hello или hello.exe./hello (Linux/macOS)hello.exe (Windows)Часть 2: Типичные ошибки и как их исправить
;error: expected ';' before 'return'; в конец строкиstd::error: 'cout' was not declared in this scopestd:: перед cout, cin, endlmainundefined reference to 'main'int main() { ... }error: ... No such file or directoryerror: missing terminating " character"}error: expected '}' at end of input} в конец файлаЧасть 3: Анатомия Hello World
#include <iostream> // Подключает библиотеку ввода-вывода
int main() { // Точка входа: отсюда начинается программа
std::cout // Вывод в консоль
<< "Hello, World!" // Текст для вывода (строковый литерал)
<< std::endl; // Перевод строки (end line)
return 0; // Возврат 0 = программа завершилась успешно
}
Каждая программа на C++ обязана иметь функцию main(). std::cout выводит данные в консоль. std::endl переносит курсор на новую строку. return 0 сообщает системе, что всё прошло успешно.
Часть 4: Ввод и вывод
std::cout << "Привет";std::cin >> переменная;std::getline(std::cin, str);std::cout << "Имя: " << name;std::string name;#include <string>)Заключение
Ты написал и запустил свою первую программу на C++. Это не просто «Hello, World!». Это твой первый шаг в мир, где ты контролируешь каждую инструкцию, которую выполняет компьютер. Ты установил компилятор, разобрался с синтаксисом, научился читать ошибки и добавил программе интерактивности. Это база. С ней ты уже можешь экспериментировать.
C++ — это марафон. Не нужно учить всё сразу. Сегодня ты освоил достаточно, чтобы начать. Дальше — практика. Каждый день понемногу. Переменные, циклы, функции — темы следующих статей. А пока закрепи результат.
Что сделать прямо сейчас? Напиши программу, которая выводит в консоль что-то забавное. Шутку, ASCII-арт, приветствие. Скомпилируй с флагом -Wall. Исправь все предупреждения. Запусти. Покажи результат другу или в чате. Докажи себе: «Я могу написать и запустить программу на C++». Потому что это правда. Ты можешь.
В следующей статье ты узнаешь, как упаковать приложение в Docker-контейнер. Docker пригодится C++ разработчику для создания воспроизводимого окружения: твоя программа будет собираться и работать одинаково на любой машине, независимо от версий компилятора и библиотек. А пока — скачай шпаргалку и держи её рядом. Пригодится.
Внутри: таблица всех команд g++ с флагами, список из 6 типичных ошибок с пояснениями и способами исправления, анатомия первой программы Hello World с разбором каждой строки и шпаргалка по вводу-выводу (cin, cout, string). Можно распечатать и держать рядом, пока учишься.
Скачать PDF