Разбираемся, кому и для чего подходит C++, какие инструменты для работы с ним самые востребованные. Устанавливаем и настраиваем базовые инструменты, а также пробуем написать и запустить простую программу. В конце статьи — список полезных ресурсов для новичков, которые помогут понять, насколько вам подходит язык.
Кто создал C++
Билл Гейтс начал программировать в школьные годы, обучаясь в привилегированной школе. Марк Цукерберг в десять лет получил в подарок компьютер и начал изучать программирование.
У автора языка C++ Бьерна Страуструпа старт не был блестящим. Его родители были бедны. Он учился в худшей школе города. Он не знал, в какой области развиваться. Страуструп как-то признался, что попал на курс информатики в университете по ошибке, перепутав его с математикой. Ошибка стала большим везением как для самого Бьерна, так и для множества программистов со всего мира.
В 80-е годы Страуструпу понадобилось написать программу моделирования распределенных вычислений для фирмы Bell Labs. К тому времени он изучил более двадцати языков программирования, но ни один не подходил для задачи.
Тогда он решил разработать объектно-ориентированный язык на основе синтаксиса Си. В 1985 году он презентовал свою разработку в книге «Язык программирования C++».
В чем отличие C++ от других языков
C++ используют в финтехе, разработке игр, для создания программ разной сложности: от простых утилит до масштабных систем. C++ сложно назвать языком для новичков, в простоте он уступает популярному Python. Однако у C++ есть особенности, которые делают его более гибким.
Большие возможности и большая ответственность. Многие современные языки, такие как C#, Java, Ruby обеспечивают управление памятью и проверки безопасности без участия программиста, на уровне компилятора. Но Страуструп считает это не преимуществом, а уязвимостью, от которой страдает и безопасность, и быстродействие. В C++ все контролирует автор программы.
Объектно-ориентированность. Концепция ООП была реализована еще в Simula67. Но по-настоящему популярным подход стал благодаря работам Страуструпа.
Универсальность и гибкость. C++ разрабатывался как язык для широкого круга задач, от программирования микроконтроллеров до систем любой сложности. Страуструп предполагал, что для разработки потребуются многочисленные библиотеки с нужными классами и функциями.
Основы синтаксиса C++
Программа состоит из инструкций. Инструкция (statement) выполняет какое-то действие. После инструкции в C++ ставится знак «;».
Например:
std::cout << "мой текст";
Несколько инструкций, заключенных в фигурные скобки, составляют блок кода:
{ std::cout << "мой текст"; std::cout << "еще текст"; }
Здесь cout — это стандартный выходной поток. В C++ нет готовых средств ввода-вывода, для этого используют объектно-ориентированную библиотеку iostream.
Чтобы компилятор подключил библиотеку, требуется директива:
#include <iostream>
Iostream определяет три стандартных потока:
- cin — входной поток (stdin в C);
- cout — выходной поток (stdout в C);
- cerr — поток вывода сообщений об ошибках (stderr в C).
Они находятся в пространстве имен (namespace) std. Чтобы использовать их без префикса std::, можно предварительно применить инструкцию:
using namespace std;
Для ввода-вывода переопределены две операции:
- >> — получить из входного потока;
- << — поместить в выходной поток.
Вывод на консоль выглядит так:
using namespace std; cout << значение;
Значение — это данные определенного типа. Тип данных определяет, какие операции с ними можно производить и сколько байт в памяти они занимают.
Основные типы данных в C++:
- int — целочисленный тип данных;
- float — тип данных с плавающей запятой;
- double — тип данных с плавающей запятой двойной точности;
- char — символьный тип данных;
- bool — логический тип данных
Попробуем написать «Hello, world!». Программа на C++ обязательно включает функцию main. С нее начинает работу программа. Тело функции — это блок кода. После имени в круглых скобках следует список параметров. Если параметры не нужны, скобки пустые. Функция возвращает значение определенного типа.
Так выглядит заголовок функции main без параметров, возвращающей целое число:
int main()
В конце тела функции нужен оператор return и возвращаемое значение. Обычно 0 — признак успешного завершения.
return 0;
Так выглядит программа вывода сообщения «Hello, world!»:
#include <iostream> using namespace std; int main() { cout << "Hello world"; return 0; }
Что нужно для программирования на C++
Запуск оnline
Можете набрать в Google «Online-компиляторы для C++» и выбрать любой. Но для многих нужна регистрация, настройки и пр.
По ссылке вы попадете сразу на нужную страницу. В окне справа уже будет пример кода вывода приветствия миру:
Нажмите кнопку «Run» — зеленую со стрелочкой слева вверху. В нижней части экрана увидите результат — сообщение «Hello, world!».
Работа с C++ на локальном компьютере
Устанавливаем и проверяем компилятор
Согласно опросу Jetbrains, самый популярный набор компиляторов для разных операционных систем — GCC с компилятором g++ для языка C++.
Воспользуемся пакетом средств для разработки MSYS2, который включает GCC. Скачаем и запустим msys2-x86_64-20230718.exe:
Выбираем флажки для меню Пуск, и пакет устанавливается. Когда установка закончится, запустится консоль MSYS2.exe, если такой пункт был выбран. Можно запустить usrt_64.exe из папки указанного при установке каталога.
Чтобы установить набор компиляторов GCC, наберем в консоли команду pacman -S mingw-w64-x86_64-gcc.
Пакетный менеджер начнет устанавливать пакет компиляторов. Не забудьте ответить Y на запрос:
Желательно сразу установить отладчик. Для этого набираем в консоли MSYS2 команду pacman -S mingw-w64-x86_64-gdb и также отвечаем Y.
Теперь в каталоге C:\msys64\ucrt64\bin есть файл компилятора g++.exe. Добавляем путь к нему в Переменные среды. В окне поиска в Windows вводим «изменение переменных среды» .
Изменяем переменную Path: добавляем путь C:\msys64\ucrt64\bin. Теперь мы сможем скомпилировать и запустить программу на C++. Создаем файл hello.cpp с текстом нашей программы из прошлого раздела в любом текстовом редакторе:
#include <iostream> using namespace std; int main() { cout << "Hello world"; return 0; }
Помещаем его в папку C:\HELLO_CPP.
Осталось скомпилировать. Открываем командную строку Windows. Для этого можно ввести текст «командная строка» в окне поиска в Windows. Переходим в нужную папку с помощью команды cd C:\HELLO_CPP и запускаем компиляцию g++ hello.cpp -o hello.
В первом параметре указан файл с кодом, который надо скомпилировать. У нас получилось готовое приложение, можно его запускать. Набираем hello.
Программа работает!
Выбираем среду для разработки на C++
Конечно, набирать весь код в обычном текстовом редакторе и вручную компилировать и запускать неудобно. Потребуется специальное ПО для разработки.
Спор между сторонниками редакторов кода и IDE не разрешен. Использование редактора более соответствует философии C++, где все контролирует программист. Также встречается мнение, что редактор больше подходит для обучения, позволяет вникнуть в детали. В интернете много обзоров редакторов кода, например этот.
В то же время, необходимость работы со множеством библиотек и фреймворков, работа в команде и многие другие причины побуждают использовать мощные IDE. Рейтинг для C++ можно посмотреть здесь.
Настраиваем Visual Studio Code для C++
Как скачать и установить Visual Studio Code, рассказываем по ссылке. При установке выбирайте 64-битный System Installer.
Теперь нужно настроить VS Code для работы с компилятором и отладчиком для C++, которые установили на предыдущем этапе.
Сначала установите расширение для работы с C++. Нажмите на значок «Extensions» слева и в строке поиска плагинов наберите C++. Убедитесь, что плагин с описанием «C/C++ IntelliSense, debugging, and code browsing» установлен, или установите его, нажав «Install».
Закройте программу VS Code и запустите ее из командной строки командой code .. Убедитесь, что в текущей папке создан каталог с настройками .vscode.
Теперь нужно создать каталог .vscode в папке C:\HELLO_CPP с исходным кодом, на котором проверяли компилятор. В каталоге создаем файлы настроек в формате JSON. Удобно использовать как редактор VS Code.
Файл tasks.json отвечает за то, чтобы работала комбинация клавиш Ctrl+shift+B для сборки программы. Убедитесь, что указан правильный путь к компилятору g++.exe, который установили с пакетом MSYS2:
{ "version": "2.0.0", "tasks": [ { "type": "shell", "label": "g++.exe build active file", "command": "C:/msys64/mingw64/bin/g++.exe", "args": [ "-std=c++17", "-g", "${file}", "-o", "${fileDirname}\\${fileBasenameNoExtension}.exe" ], "options": { "cwd": "C:\\msys64\\mingw64\\bin" }, "problemMatcher": [ "$gcc" ], "group": "build" }, { "type": "cppbuild", "label": "C/C++: g++.exe build active file", "command": "C:\\msys64\\mingw64\\bin\\g++.exe", "args": [ "-fdiagnostics-color=always", "-g", "${file}", "-o", "${fileDirname}\\${fileBasenameNoExtension}.exe" ], "options": { "cwd": "C:\\msys64\\mingw64\\bin" }, "problemMatcher": [ "$gcc" ], "group": { "kind": "build", "isDefault": true }, "detail": "Task generated by Debugger." } ] }
Файл launch.json отвечает за работу отладчика. Проверьте правильность пути к отладчику gdb.exe:
{ "version": "0.2.0", "configurations": [ { "name": "g++.exe build and debug active file", "type": "cppdbg", "request": "launch", "program": "${fileDirname}\\${fileBasenameNoExtension}.exe", "args": [], "stopAtEntry": false, "cwd": "${workspaceFolder}", "environment": [], "externalConsole": false, "MIMode": "gdb", "miDebuggerPath": "C:\\msys64\\mingw64\\bin\\gdb.exe", "setupCommands": [ { "description": "Enable pretty-printing for gdb", "text": "-enable-pretty-printing", "ignoreFailures": true } ], "preLaunchTask": "g++.exe build active file", "internalConsoleOptions": "neverOpen" } ] }
Файл c_cpp_properties.json отвечает за расположение include-файлов. Также проверьте правильность пути:
{ "configurations": [ { "name": "Win32", "includePath": [ "${workspaceFolder}/**", "C:/msys64/mingw64/include/**" ], "defines": [ "_DEBUG", "UNICODE", "_UNICODE" ], "windowsSdkVersion": "8.1", "compilerPath": "C:\\msys64\\mingw64\\bin\\g++.exe", "cStandard": "c11", "cppStandard": "c++17", "intelliSenseMode": "gcc-x86" } ], "version": 4 }
Пробуем запустить ранее созданный код из hello.cpp. Открываем файл. Разворачиваем список возле стрелки справа вверху и выбираем режим запуска без отладки — Run C/C++ File.
Теперь нажмем на стрелку, и программа выполнится.
Выбираем режим отладки Debug C/C++ File, нажимаем на значок отладки слева, чтоб включить панель отладки, и запускаем снова. Отлично, отладчик тоже работает.
Ресурсы для изучения C++
В интернете много ресурсов для самостоятельного изучения основ C++.
Основы C++ от Академии Яндекса — на курсе рассматривают базовые конструкции, стандартную библиотеку и идиомы C++. По каждой теме есть разбор задач.
В более подробном руководстве по языку C++ есть информация про основы синтаксиса, указатели, функции, работу со строками, алгоритмами и контейнерами.
Если хотите разобраться подробно и начать с основ, почитайте книги автора языка Бьерна Страуструпа:
- «Язык программирования C++»;
- «Дизайн и эволюция языка C++»;
- «Программирование. Принципы и практика использования C++»
Если после бесплатных курсов язык вам понравится, захочется программировать на нем, можно записаться на коммерческие курсы. Под руководством менторов и с понятным расписанием вы пройдете путь с нуля до специалиста по C++.