Введение
В терминале дистрибутивов семейства Linux нередко встречается утилита c++, чье предназначение и внутренние механизмы вызывают вопросы у начинающих разработчиков. В данном материале мы разберем архитектурную взаимосвязь между c++ и g++, а также на наглядных примерах освоим компиляцию и выполнение программного кода в операционной системе.
Подготовка рабочего окружения и вызов компилятора c++
Для сборки проектов на C++ в среде Ubuntu требуется базовый стек утилит разработчика, который разворачивается командой apt-get update -qq && apt-get install -y build-essential.

Определить точное расположение исполняемого файла компилятора в иерархии файловой системы позволяет вызов which c++.

Команда c++ --version выводит сведения о текущем релизе используемого компилятора, параметрах сборки и целевой платформе.
⚙️ [Ключевые флаги сборки]
-o <file> : задает имя и путь для генерируемого исполняемого файла.-c : выполняет трансляцию исходных текстов в объектный модуль (.o) без запуска компоновщика.-Wall : выводит расширенный набор предупреждений о сомнительных или потенциально ошибочных конструкциях.-O2 : активирует второй уровень оптимизации для баланса производительности и размера бинарника.-std=<standard> : явно задает стандарт диалекта языка (например, c++17 или c++20).-g : внедряет отладочную информацию для последующей инспекции через gdb.

Анализ симлинка /usr/bin/c++ и его взаимосвязи с g++
С помощью утилиты ls -l /usr/bin/c++ можно проинспектировать атрибуты файла и проследить цепочку символических ссылок в системе.
Полученный вывод наглядно демонстрирует, на какой конкретно компонент ОС ссылается псевдоним c++.

Выполнение конструкции update-alternatives --display c++ 2>/dev/null || readlink -f /usr/bin/c++ дает возможность либо запросить конфигурацию подсистемы альтернатив, либо напрямую вычислить абсолютный путь конечного исполняемого файла.
Это подтверждает факт того, что за псевдонимом c++ на самом деле скрывается стандартный компилятор g++.

Написание первого исходника и компиляция через c++
Для практической проверки создадим простейшую программу hello.cpp, выводящую приветственное сообщение в консоль.

Запуск трансляции файла hello.cpp посредством утилиты c++ формирует оптимизированный бинарник hello с проверкой предупреждений компилятора.
Если синтаксис корректен, процесс сборки завершается молча, не выводя лишних сообщений в терминал.

Запустим собранное приложение напрямую из текущей рабочей директории.
В окне терминала отобразится строка "Hello from Linux c++!", подтверждая работоспособность программы.

Сборка программы с использованием стандарта C++20 (-std=c++20)
Чтобы задействовать современные конструкции языка — в частности, std::string_view и спецификатор constexpr — сформируем исходный файл modern.cpp.

Флаг -std=c++20, переданный команде c++, указывает парсеру на необходимость сборки modern.cpp в соответствии со спецификацией C++20 и генерирует бинарник modern.
Отсутствие сообщений об ошибках свидетельствует об успешном завершении этапов трансляции и линковки.

Остается протестировать полученный файл modern в действии.
Успешный вывод сообщения "Modern C++20 on Ubuntu" подтверждает корректную обработку современных языковых конструкций.

Мы подробно рассмотрели роль команды c++ в Linux, ее неразрывную связь с g++, а также практические нюансы сборки исходников под разными версиями стандартов.
Используя рассмотренные флаги и параметры, вы сможете без труда настроить гибкий пайплайн сборки C++ под свои задачи.