Глиф Учебники

Урок 1. Установка компилятора и первая программа

Курс «C» · урок 1 из 10 · 6 минут чтения

Программа на C — это обычный текстовый файл с расширением .c. Сам по себе компьютер такой файл выполнить не может: сначала его нужно скомпилировать — перевести в машинный код. Это делает компилятор, в курсе — gcc. Из файла hello.c он делает исполняемый файл hello (в Windows — hello.exe), который уже можно запускать.

hello.c текст программы gcc компилятор hello машинный код $ ./hello Привет, мир! вывод программы сборка: gcc hello.c -o hello запуск: ./hello в Windows: hello.exe
Компилятор gcc переводит текст программы из файла hello.c в машинный код — исполняемый файл hello, а команда ./hello (в Windows — hello.exe) запускает его, и программа выводит «Привет, мир!».

Шаг 1. Установите компилятор

Способ зависит от системы на компьютере — выберите свою.

LinuxUbuntu, Debian, Linux Mint

Откройте терминал и выполните:

Bash
sudo apt update
sudo apt install build-essential

Первая команда скачивает свежий список пакетов, вторая ставит пакет build-essential: в нём gcc, файлы стандартной библиотеки C и программа make. В Fedora та же задача решается командой sudo dnf install gcc.

Дальше — для всех случаев

WindowsCode::Blocks или MSYS2

Самый простой путь — среда Code::Blocks в варианте со встроенным компилятором MinGW (в имени установщика есть mingw). Если нужен gcc в командной строке — поставьте его через MSYS2. Оба способа по шагам описаны в справке Как установить gcc в Windows.

Дальше — для всех случаев

macOSинструменты разработчика Apple

Выполните в терминале xcode-select --install — поставятся инструменты разработчика Apple. Команда gcc в macOS запускает компилятор clang; для курса разницы нет, все команды те же.

Проверьте, что компилятор на месте:

Bash
gcc --version

Должна появиться строка с номером версии. Если вместо неё «команда не найдена» или «не является внутренней или внешней командой» — компилятор не установлен или (в Windows) его папки нет в переменной Path.

Шаг 2. Напишите программу

Создайте папку для учебных программ, а в ней — файл hello.c. Подойдёт любой редактор, который сохраняет простой текст: VS Code, Notepad++, gedit, Code::Blocks. Word и WordPad не годятся — они добавляют в файл оформление.

C
#include <stdio.h>

int main(void) {
    printf("Привет, мир!\n");
    return 0;
}
Вывод
Привет, мир!

Шаг 3. Соберите и запустите

Нужны две команды: первая собирает программу, вторая запускает. Как их набрать — зависит от того, где вы работаете.

Linux и macOSтерминал

Откройте терминал в папке с файлом (или перейдите в неё командой cd с путём к папке) и выполните:

Терминал
$ gcc hello.c -o hello
$ ./hello
Привет, мир!

Точка и косая черта в ./hello означают «из текущей папки»: в Linux и macOS программы из текущей папки запускаются только так.

Дальше — для всех случаев

Windowsкомандная строка или PowerShell

Откройте командную строку (cmd) в папке с файлом и выполните:

Командная строка
gcc hello.c -o hello.exe
hello.exe

В PowerShell запуск пишется как .\hello.exe.

Дальше — для всех случаев

Code::Blocksклавиша F9

Отдельные команды не нужны: клавиша F9 собирает и сразу запускает программу.

Ключ -o hello задаёт имя готового файла. Без него gcc назовёт файл a.out (в Windows — a.exe).

Если в Windows вместо русских букв видны непонятные символы, дело в кодировке консоли, а не в программе. Как это исправить — в справке Русские буквы в консоли Windows.

Что значит каждая строка

Отступы в четыре пробела компилятору не нужны, но без них программу трудно читать. Ставьте их всегда.

Вывод нескольких строк

Каждый printf выводит ровно то, что написано в кавычках. Если \n нет, следующий текст продолжит ту же строку:

C
#include <stdio.h>

int main(void) {
    printf("Язык C. ");
    printf("Урок первый.\n");
    printf("Строка 1\nСтрока 2\n");
    printf("Кавычки: \"текст\", обратная черта: \\\n");
    printf("2 + 3 = %d\n", 2 + 3);
    return 0;
}
Вывод
Язык C. Урок первый.
Строка 1
Строка 2
Кавычки: "текст", обратная черта: \
2 + 3 = 5

Сочетания с обратной косой чертой называются управляющими последовательностями: \n — новая строка, \t — табуляция, \" — кавычка внутри строки, \\ — сама обратная черта. А %d в последней строке — место, куда printf подставит число; подробно об этом — в следующем уроке.

Комментарии

Комментарий — пояснение для человека, компилятор его пропускает. Однострочный начинается с //, многострочный заключается между /* и */:

C
#include <stdio.h>

/* Программа выводит приветствие.
   Автор: ученик 10 класса. */
int main(void) {
    printf("Hello!\n");  // вывод на экран
    return 0;
}
Вывод
Hello!

Включите предупреждения

Компилятор умеет замечать подозрительные места: забытый #include, неверный формат в printf, переменную без значения. По умолчанию он молчит о многом, поэтому собирайте программы так:

Bash
gcc -std=c17 -Wall -Wextra hello.c -o hello

-std=c17 — собирать по стандарту C17, -Wall и -Wextra — включить большинство полезных предупреждений. В Code::Blocks ключи задаются в настройках компилятора, меню Settings → Compiler: -Wall есть там в списке отметок, недостающие ключи можно дописать в поле дополнительных параметров.

Частые ошибки

Компилятор сообщает об ошибке так: имя файла, номер строки и столбца, затем текст. Например, если забыть точку с запятой после printf("Hi\n"):

Текст
hello.c: In function 'main':
hello.c:4:19: error: expected ';' before 'return'

4:19 — строка 4, столбец 19: конец строки с printf, где и не хватает точки с запятой. Компилятор заметил это, только дойдя до return на следующей строке, поэтому и пишет «перед return». Бывает, что ошибка указана строкой ниже настоящей: если в названной строке всё верно, смотрите строку выше.

строка ошибка hello.c : 4 : 19 : error : expected ';' before 'return' файл столбец что не так 3 int main(void) { 4 printf("Hi\n") ; столбец 19: здесь нужна ; 5 return 0; ошибку компилятор заметил только на return
Сообщение gcc делится на файл, строку 4, столбец 19, вид error и текст ошибки: после printf("Hi\n") не хватает точки с запятой, а заметил это компилятор только на return.

Если забыть #include <stdio.h>, компилятор напишет implicit declaration of function 'printf' — подробно об этом в справке Ошибка implicit declaration of function.

Ещё одна частая ситуация в Windows: программу запустили двойным щелчком по .exe, окно мелькнуло и закрылось. Программа отработала, просто окно закрывается сразу после её завершения. Запускайте программы из командной строки или из среды разработки.

Коротко

Проверьте себя

1. Что делает команда gcc hello.c -o hello?
2. С какой функции начинается выполнение программы на C?
3. Что выведет программа?
C
#include <stdio.h>

int main(void) {
    printf("A");
    printf("B\n");
    printf("C\n");
    return 0;
}
4. Чем отличается warning от error при сборке?