Как устроена программа на C++
Программа на C++ — это текст, а процессор выполняет только машинный код. Поэтому файл с программой нельзя запустить сразу — сначала его переводят. Вот программа, которая печатает одну строку:
#include <iostream>
int main() {
std::cout << "Hello, world\n"; // Hello, world
}Строка #include <iostream> вставляет в файл описание средств ввода и вывода из стандартной библиотеки. Среди них есть std::cout — стандартный вывод программы. Оператор << отправляет в него текст, а \n в конце текста переводит строку.
Где начинается выполнение
Выполнение программы начинается с функции main, и в программе она ровно одна. Её тело — это инструкции в фигурных скобках, и они выполняются по очереди, сверху вниз. Инструкция с std::cout заканчивается точкой с запятой. После последней инструкции main программа завершается.
От текста к программе
Файл hello.cpp с текстом программы называют исходным. Компилятор (compiler) проверяет, что текст написан по правилам C++, и переводит его в машинный код. Этот код он записывает в объектный файл (object file) — например, hello.o.
Компоновщик (linker) соединяет объектные файлы с готовым кодом стандартной библиотеки, в том числе с кодом std::cout. Получается исполняемый файл — его и запускает операционная система. Если исходных файлов несколько, компилятор переводит каждый отдельно, а компоновщик собирает из них одну программу. Обычно оба шага запускает одна команда, а объектные файлы — лишь промежуточный результат.
Ошибки до запуска и после
Если текст нарушает правила языка, компилятор сообщает об ошибке компиляции и называет строку, где её нашёл. Исполняемый файл тогда не появляется, и запускать нечего. Но компилятор проверяет только правила, а не замысел автора. Опечатку в "Helo, world\n" он пропустит, и её будет видно только во время выполнения — в том, что напечатает программа.
Кроме ошибок, компилятор выдаёт предупреждения. Программа с ними собирается, но компилятор показывает место, которое похоже на ошибку.
Частая ошибка
После инструкции с std::cout забыта точка с запятой:
#include <iostream>
int main() {
std::cout << "Hello, world\n" // ✗
}error: expected ';' after expressionЭто ошибка компиляции: исполняемый файл не появился, поэтому программа не запускалась ни разу.