Урок 1. Установка компилятора и первая программа
Программа на C — это обычный текстовый файл с расширением .c. Сам по себе компьютер такой файл выполнить не может: сначала его нужно скомпилировать — перевести в машинный код. Это делает компилятор, в курсе — gcc. Из файла hello.c он делает исполняемый файл hello (в Windows — hello.exe), который уже можно запускать.
Шаг 1. Установите компилятор
Способ зависит от системы на компьютере — выберите свою.
LinuxUbuntu, Debian, Linux Mint
Откройте терминал и выполните:
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; для курса разницы нет, все команды те же.
Проверьте, что компилятор на месте:
gcc --versionДолжна появиться строка с номером версии. Если вместо неё «команда не найдена» или «не является внутренней или внешней командой» — компилятор не установлен или (в Windows) его папки нет в переменной Path.
Шаг 2. Напишите программу
Создайте папку для учебных программ, а в ней — файл hello.c. Подойдёт любой редактор, который сохраняет простой текст: VS Code, Notepad++, gedit, Code::Blocks. Word и WordPad не годятся — они добавляют в файл оформление.
#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.
Что значит каждая строка
#include <stdio.h>— подключает заголовочный файлstdio.h(standard input/output — стандартный ввод и вывод). В нём объявлены функции ввода и вывода, в том числеprintf. Без этой строки компилятор не знает, что такоеprintf.int main(void)— главная функция. С неё начинается выполнение любой программы на C.intзначит, что функция вернёт целое число,voidв скобках — что параметров у неё нет.- Фигурные скобки
{и}— начало и конец тела функции: всё, что между ними, выполняется по порядку. printf("Привет, мир!\n");— вызов функцииprintf, которая выводит текст. Текст в двойных кавычках называется строкой.\n— переход на новую строку.return 0;— завершаетmainи сообщает системе код завершения: 0 значит «всё прошло успешно».- Точка с запятой
;заканчивает каждую команду. Забытая точка с запятой — самая частая ошибка новичка.
Отступы в четыре пробела компилятору не нужны, но без них программу трудно читать. Ставьте их всегда.
Вывод нескольких строк
Каждый printf выводит ровно то, что написано в кавычках. Если \n нет, следующий текст продолжит ту же строку:
#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 подставит число; подробно об этом — в следующем уроке.
Комментарии
Комментарий — пояснение для человека, компилятор его пропускает. Однострочный начинается с //, многострочный заключается между /* и */:
#include <stdio.h>
/* Программа выводит приветствие.
Автор: ученик 10 класса. */
int main(void) {
printf("Hello!\n"); // вывод на экран
return 0;
}Hello!Включите предупреждения
Компилятор умеет замечать подозрительные места: забытый #include, неверный формат в printf, переменную без значения. По умолчанию он молчит о многом, поэтому собирайте программы так:
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». Бывает, что ошибка указана строкой ниже настоящей: если в названной строке всё верно, смотрите строку выше.
- error (ошибка) — исполняемый файл не создан, программу нужно исправить.
- warning (предупреждение) — файл создан, но в программе, скорее всего, ошибка. Не оставляйте предупреждения без внимания.
Если забыть #include <stdio.h>, компилятор напишет implicit declaration of function 'printf' — подробно об этом в справке Ошибка implicit declaration of function.
Ещё одна частая ситуация в Windows: программу запустили двойным щелчком по .exe, окно мелькнуло и закрылось. Программа отработала, просто окно закрывается сразу после её завершения. Запускайте программы из командной строки или из среды разработки.
Коротко
- Программа на C — текстовый файл
.c; компилятор gcc превращает его в исполняемый файл. - Сборка —
gcc hello.c -o hello, запуск —./hello(в Windows —hello.exe). - Любая программа начинается с функции
main;return 0значит «успешно». printfвыводит текст,\nпереводит строку,#include <stdio.h>нужен дляprintf.- Каждая команда заканчивается
;. Собирайте с ключами-Wall -Wextraи читайте предупреждения.