Компилятор C: какой выбрать и как установить на Windows, macOS и Linux

Для учёбы и большинства задач подходят GCC и Clang: оба бесплатные и понимают C17 и C23.

Показываем, как поставить компилятор C на Windows, macOS и Linux, какими флагами собирать программу и что делать с ошибками undefined reference и «gcc не является командой».

Статью написал:
Ваня Буявец, продюсер, основатель Checkroi
Ваня Буявец
Основатель Checkroi, продюсер, эксперт в выборе онлайн-курсов
Все 2806 статей автора Подписаться на Телеграм-канал
Одобрено экспертом:
Наташа Буявец, основатель Checkroi, эксперт по онлайн-курсам
Наташа Буявец
Основательница Checkroi, продюсер Youtube-каналов, эксперт по онлайн-курсам
Все 3460 экспертных мнений Подписаться на Телеграм-канал
Обложка: Компилятор C: какой выбрать и как установить на Windows, macOS и Linux

Для учёбы и большинства задач берите GCC или Clang. Оба бесплатные, понимают современные стандарты C17 и C23 и одинаково работают на Windows, macOS и Linux. На Windows проще всего поставить GCC через MSYS2 или компилятор MSVC из Visual Studio, на Mac Clang ставится одной командой xcode-select --install, на Linux GCC приезжает пакетом build-essential.

Если код пишется под микроконтроллер, нужен кросс-компилятор под его архитектуру, об этом отдельный раздел ниже. Чем занимается разработчик на Си и где этот язык живёт сегодня, мы разбирали в отдельной статье. Учить сам язык по программе с проверкой заданий можно на курсах по Си из нашего каталога.

Компиляторы ниже собирают и C, и C++: у GCC для плюсов есть команда g++, у Clang есть clang++, а cl из Visual Studio сам смотрит на расширение файла. Поэтому выбор один и тот же, на каком бы из двух языков вы ни писали, а чем отличается работа программиста C++, мы рассказывали отдельно.

CheckroiCheckroiПодборка курсов по C (язык Си)15 курсов • 6 школСравните цены, школы, программу и найдите выгодные предложения по обучениюСравнить→

Какой компилятор C выбрать под свою задачу

Рой выбирает компилятор C за ноутбуком

Короткая шпаргалка. Подробности по каждому компилятору и команды установки дальше по тексту.

Задача Что поставить Почему
Учёба на Windows GCC из MSYS2 Те же команды, что в учебниках и на Linux
Программы под Windows, работа в Visual Studio MSVC Родной компилятор системы, отладчик в одном окне
Mac Clang (Command Line Tools) Уже настроен под систему, ставится одной командой
Linux, серверы GCC, рядом Clang GCC стоит в большинстве дистрибутивов, Clang даёт понятные ошибки
Попробовать код без установки Онлайн-компилятор Достаточно браузера
Микроконтроллеры Arm GNU Toolchain, SDCC Собирают код под чужую архитектуру
Авионика, медицина CompCert Корректность компиляции доказана математически

Новичку хватает первой строки. Выбор компилятора почти не влияет на то, как вы учите язык: код по стандарту C собирается любым из списка, а разница проявляется в сообщениях об ошибках и в удобстве установки. Как выстроить само обучение, мы разбирали в статье как учить языки программирования самостоятельно.

Что делает компилятор C

Компилятор переводит текст программы в машинный код, который выполняет процессор. В C это четыре шага, и у GCC каждый можно увидеть отдельно.

  1. Препроцессор подставляет содержимое #include и раскрывает макросы: gcc -E hello.c -o hello.i. Из шести строк программы с printf на Ubuntu 24.04 получилось 819 строк, почти всё это заголовок stdio.h.
  2. Компиляция переводит C в ассемблер: gcc -S hello.c создаёт файл hello.s.
  3. Ассемблирование собирает объектный файл с машинным кодом: gcc -c hello.c даёт hello.o на 1 528 байт.
  4. Компоновка (линковка) склеивает объектные файлы с библиотеками в программу: gcc hello.o -o hello.

Обычно все четыре шага запускаются одной командой gcc hello.c -o hello. Разделение нужно знать по другой причине: по тексту ошибки видно, на каком шаге сломалось. Ошибку с пометкой ld выдал компоновщик, и чинится она иначе, чем ошибка в самом коде.

Компилятор и среда разработки (IDE) это разные программы. Visual Studio Code, Code::Blocks и CLion только вызывают компилятор, сами они код не собирают. Поэтому после установки редактора компилятор часто приходится ставить отдельно. По каким признакам выбирать сам редактор, мы показали в обзоре IDE и редакторов кода.

Канал основателя Checkroi Вани Буявца3 700 человек читают мой Телеграм-канал про нейросетиСобрал промпты для Claude Code и ChatGPT, разборы ИИ-инструментов и лайфхаки по продвижению бизнеса в одном местеПрисоединиться

Сравнение популярных компиляторов C

Состояние проектов сверили по официальным сайтам 3 октября 2026 года.

Компилятор Лицензия Системы Стандарт по умолчанию Сильная сторона
GCC Свободная, GPL Linux, Windows (MinGW-w64), macOS C23 с версии 15, раньше C17 Больше всего архитектур, стандарт в Linux
Clang Свободная, Apache 2.0 macOS, Linux, Windows C17 или C23, зависит от версии Понятные ошибки, санитайзеры
MSVC Бесплатно в Visual Studio Community Только Windows C89 с расширениями, C11 и C17 по ключу Интеграция с Windows и Visual Studio
Intel oneAPI (icx) Бесплатная загрузка Windows, Linux Как у Clang, построен на LLVM Оптимизация под процессоры Intel
TCC Свободная, LGPL Linux, Windows C99 частично Компилирует почти мгновенно
CompCert Бесплатно для некоммерческого использования Linux, macOS, Windows Почти весь C11 Формально проверенная корректность

GCC

GNU Compiler Collection собирает ядро Linux и большинство пакетов в дистрибутивах, поэтому с ним рано или поздно сталкивается каждый администратор Linux. Последняя стабильная ветка на 3 октября 2026 года, по сайту проекта, GCC 16.2 от 7 августа.

С 15-й версии GCC по умолчанию компилирует C по стандарту C23, до этого по умолчанию стоял C17. На практике разница всплывает в старом коде: например, bool, true и false в C23 стали ключевыми словами, и старое объявление typedef int bool; перестаёт собираться с ошибкой о повторном объявлении типа.

Clang

Clang работает поверх LLVM, его использует Apple для macOS и iOS, Google для Android и Chrome. По новостям проекта, свежий релиз на 3 октября 2026 года LLVM 23.1.2 от 22 сентября.

Главная причина выбрать Clang новичку в том, что он объясняет ошибки человеческим языком: показывает место стрелкой и часто подсказывает исправление. Пример есть ниже, в разделе про флаги.

MSVC

Компилятор Microsoft входит в Visual Studio и в отдельные средства сборки. У него есть особенность, на которой спотыкаются студенты: без ключа /std MSVC компилирует C по стандарту C89 с собственными расширениями. Режимы C11 и C17 включаются ключами /std:c11 и /std:c17, это записано в справке Microsoft по параметру /std.

Массивов переменной длины (VLA) в MSVC нет и, по той же справке, не планируется. Если в учебнике встречается int a[n]; с n из ввода, в Visual Studio такой код не соберётся.

Intel oneAPI DPC++/C++ (icx)

Классический Intel C++ Compiler (icc) больше не выпускается: Intel убрала его из пакета oneAPI 2024.0 и предложила переходить на icx, построенный на LLVM. Совет «поставьте ICC для скорости» поэтому устарел.

Сам icx имеет смысл для вычислительных задач на процессорах Intel. Сайт Intel с российских адресов отвечает ошибкой доступа (код 403), так что скачать пакет напрямую может не получиться. Для учёбы он не нужен.

TCC и CompCert

Tiny C Compiler весит около 100 КБ и, по замеру автора, собирает код примерно в 9 раз быстрее GCC. Оптимизаций почти нет, а сам автор проектом больше не занимается, развитие идёт силами сообщества. Он годится для экспериментов и скриптов на C, для повседневной работы его обычно не берут.

CompCert доказывает, что машинный код делает ровно то, что написано в исходнике. Его используют там, где ошибка компилятора стоит дорого: в авионике, медицинской технике. Версия 3.18 вышла в августе 2026 года, коммерческие лицензии продаёт AbsInt.

Как установить компилятор C на Windows

На Windows два рабочих пути. Для учёбы удобнее GCC, для разработки программ под Windows удобнее MSVC.

GCC через MSYS2

MSYS2 это набор Unix-инструментов для Windows с менеджером пакетов. По инструкции на сайте MSYS2 нужна 64-битная Windows 10 версии 1809 или новее.

  1. Скачайте установщик с msys2.org и установите в папку по умолчанию C:\msys64.
  2. В конце установки откроется терминал UCRT64. Введите pacman -S mingw-w64-ucrt-x86_64-gcc и подтвердите установку, пакеты займут около 487 МБ.
  3. Проверьте: gcc --version должен напечатать номер версии.
  4. Чтобы gcc работал в обычной командной строке и в редакторе, добавьте C:\msys64\ucrt64\bin в переменную среды Path: «Параметры» → «Система» → «О системе» → «Дополнительные параметры системы» → «Переменные среды».

Связку MSYS2 и Visual Studio Code Microsoft описывает в документации VS Code. Как вообще настраивается редактор под язык, мы показывали на примере запуска файла Python в VS Code, с C логика та же.

MSVC из Visual Studio

  1. Скачайте Visual Studio Community или «Средства сборки для Visual Studio» на странице загрузок. Средства сборки ставят только компилятор, без редактора.
  2. В установщике отметьте рабочую нагрузку «Разработка классических приложений на C++». Компилятор C ставится вместе с ней, отдельного пункта для C нет.
  3. Откройте «Командная строка разработчика для VS» из меню «Пуск». В обычной командной строке cl не найдётся.
  4. Соберите программу: cl /W4 /std:c17 hello.c. Рядом появится hello.exe.

Порядок шагов совпадает с пошаговым руководством Microsoft, там же разобраны ошибки C1034 и LNK1104.

Компилятор C на macOS и Linux

На этих системах компилятор ставится одной командой из терминала.

Система Команда Что получите
macOS xcode-select --install Apple Clang и инструменты сборки без полного Xcode
Ubuntu, Debian sudo apt install build-essential GCC, make и заголовки стандартной библиотеки
Fedora sudo dnf install gcc GCC
Любой Linux, второй компилятор sudo apt install clang или аналог Clang рядом с GCC

На Mac команда gcc запускает Clang. Мы проверили на macOS с Apple Silicon: gcc --version печатает «Apple clang version 17.0.0». Настоящий GCC на Mac ставится отдельно, например через Homebrew, но для учёбы хватает и Clang.

Версия из пакетов дистрибутива отстаёт от свежей. В Ubuntu 24.04 apt ставит GCC 13.3, и он по умолчанию собирает код по стандарту C17. Мы проверили это командой echo | gcc -dM -E -x c - | grep __STDC_VERSION__, она вернула 201710L. Для учебника по C17 этого хватает, свежий GCC нужен, только если вы учите C23.

Как скомпилировать первую программу: команда и флаги

Сохраните код в файл hello.c:

#include <stdio.h>

int main(void) {
    printf("Привет, компилятор!\n");
    return 0;
}

И соберите с флагами, которые стоит включать всегда:

gcc -std=c17 -Wall -Wextra -O2 hello.c -o hello
./hello
Привет, компилятор!

На Windows программа запускается командой hello или .\hello.exe. Для Clang команда та же, только вместо gcc пишется clang.

Учебные программы стоит держать в Git с первого дня. Когда сборка внезапно ломается, проще откатиться к рабочей версии, чем искать правку глазами, а основы есть в статье Git простыми словами.

Флаг Что делает
-o имя Имя готовой программы. Без него получится a.out или a.exe
-std=c17 Фиксирует стандарт языка, чтобы код вёл себя одинаково на разных версиях компилятора
-Wall -Wextra Включают предупреждения о подозрительном коде
-O2 Оптимизация скорости, для учебных задач можно не ставить
-g Добавляет отладочную информацию для gdb и lldb
-fsanitize=address Ловит выход за границы массива и работу с освобождённой памятью во время запуска

Предупреждения ловят ошибки до запуска. Вот программа, которая печатает неинициализированную переменную count. Без флагов оба компилятора собирают её молча, а с -Wall -Wextra пишут так.

GCC 13.3:

bug.c:5:5: warning: 'count' is used uninitialized [-Wuninitialized]
    5 |     printf("%d\n", count);
      |     ^~~~~~~~~~~~~~~~~~~~~

Apple Clang 17 вдобавок подсказывает исправление:

bug.c:5:20: warning: variable 'count' is uninitialized when used here [-Wuninitialized]
bug.c:4:14: note: initialize the variable 'count' to silence this warning
    4 |     int count;
      |              ^
      |               = 0

Полный список предупреждений есть в документации GCC, про санитайзер памяти подробно написано в документации Clang.

Ваня БуявецКанал основателя Checkroi Вани БуявцаЗабирайте промпты и обучение по нейросетям в моём Телеграм-каналеБольше 3 700 человек уже применяют Claude Code, ChatGPT и другие нейросети в работе, учёбе, бизнесе и жизниПерейти в канал

Онлайн-компиляторы C: когда хватает браузера

Онлайн-компилятор подходит, чтобы проверить кусок кода из учебника, решить задачу на олимпиадной платформе или показать пример коллеге. Для проекта из нескольких файлов и работы с файлами на диске нужен локальный компилятор. А если нужны задачи с разбором ошибок от преподавателя, посмотрите курсы C++ в каталоге.

Сервис Для чего удобен
Compiler Explorer Сравнить, во что разные версии GCC, Clang и MSVC превращают один и тот же код
OnlineGDB Запуск с вводом данных и пошаговой отладкой
OneCompiler Быстро запустить программу, внутри GCC
JDoodle Запуск и ссылка на код, чтобы поделиться
Ideone Простой запуск со стандартным вводом

Все пять сайтов 3 октября 2026 года открывались с российского сервера. На телефоне с Android код на C можно собрать в приложении Cxxdroid, внутри него тоже настоящий компилятор.

Компиляторы C для микроконтроллеров

Плата микроконтроллера, программатор и ноутбук с кодом

Программа для Arduino, STM32 или датчика собирается на компьютере, а работает на другом процессоре. Такой компилятор называют кросс-компилятором, и под каждую архитектуру он свой.

  • Arm GNU Toolchain (arm-none-eabi-gcc) собирает код для STM32 и других чипов на ядрах Cortex-M. Это сборка GCC от Arm, сайт Arm с российских адресов отвечает ошибкой доступа, поэтому пакет удобнее ставить из репозитория дистрибутива или через MSYS2.
  • avr-gcc работает внутри Arduino IDE для плат на AVR, ставить его отдельно не нужно.
  • SDCC собирает код для старых 8-битных архитектур, например 8051.
  • IAR и Keil это коммерческие среды для промышленных проектов, со своими компиляторами и сертификацией для безопасных систем.

Чем программист микроконтроллеров отличается от прикладного разработчика и почему в этой работе C до сих пор основной язык, мы разбирали отдельно. Путь от первой платы до работы описан в плане как стать программистом на Си.

Частые ошибки при компиляции и что с ними делать

Рой радуется, что программа собралась без ошибок

Большинство проблем новичков связаны не с кодом, а с установкой и командой сборки.

Сообщение Причина Что сделать
«gcc не является внутренней или внешней командой» Папки компилятора нет в Path Добавить C:\msys64\ucrt64\bin в Path и открыть новое окно терминала
«cl не является внутренней или внешней командой» Открыта обычная командная строка Запустить «Командная строка разработчика для VS»
undefined reference to `sqrt' Не подключена математическая библиотека Добавить -lm в конец команды: gcc root.c -o root -lm
undefined reference to `main' В файле нет функции main или собирается не тот файл Проверить имя файла в команде и написание main
Код из учебника не собирается в Visual Studio MSVC по умолчанию в режиме C89, а VLA не поддерживает вовсе Включить /std:c17, массивы переменной длины заменить на malloc
Ошибка с bool после обновления GCC С 15-й версии по умолчанию C23 Собирать с -std=c17 или убрать свой typedef int bool

Ошибку с sqrt мы воспроизвели на GCC 13.3: без -lm компоновщик падает, с ним программа печатает 1.414 для числа 2. На macOS математическая библиотека подключена по умолчанию, поэтому там та же команда работает и без флага.

Как мы отбирали компиляторы

  • Брали компиляторы, которые обновлялись в 2025–2026 годах или остаются стандартом в своей нише.
  • Каждый факт о версии и стандарте сверили с официальным сайтом проекта 3 октября 2026 года.
  • Примеры кода собрали на GCC 13.3 (Ubuntu 24.04) и Apple Clang 17 (macOS), вывод в статье скопирован из терминала.
  • Доступность сайтов проверяли запросом с российского сервера.

Не вошли Turbo C и Borland C++: их последние версии вышли больше двадцати лет назад. Dev-C++ отдельным пунктом не стал: это среда разработки, внутри которой лежит старая сборка GCC. Классический Intel icc снят с выпуска.

Где освоить C и C++ системно

Поставить компилятор и собрать первую программу можно за вечер. Дальше начинается работа с памятью, указателями, сборкой многофайловых проектов и отладкой, и тут быстрее идти по программе с проверкой заданий.

Ниже подборка курсов по языку Си из каталога, курсы по C++ собраны в соседнем разделе. Если думаете о профессии, начните с плана как стать C++ разработчиком с нуля.

КурсШколаСтоимость со скидкойВ рассрочкуДлитель­ностьОбзор курса от Checkroi
Инженер-программист
Перейти на сайт курса
GeekBrainsGeekBrains159 408 ₽4428 ₽/мес.12 месяцевОбзор курса
Специалист по информационной безопасности: расширенный курс
Перейти на сайт курса
НетологияНетология117 300 ₽4018 ₽/мес.13 месяцевОбзор курса
Внедрение и работа в DevSecOps
Перейти на сайт курса
OTUSOTUS88 000 ₽8800 ₽/мес.5 месяцевОбзор курса
Блокчейн
Перейти на сайт курса
GeekBrainsGeekBrains168 768 ₽4153 ₽/мес.4 месяцаОбзор курса
Инженер-программист C++
Перейти на сайт курса
GeekBrainsGeekBrains7970 ₽221 ₽/мес.1 месяцОбзор курса

Больше программ — в полном каталоге курсов по C (язык Си)

Часто задаваемые вопросы

Какой компилятор C лучше выбрать новичку?

GCC или Clang: оба бесплатные, поддерживают C17 и C23 и одинаково работают на разных системах. На Windows проще всего поставить GCC через MSYS2, на Mac Clang ставится командой xcode-select --install, на Ubuntu GCC приезжает пакетом build-essential.

Где скачать компилятор C для Windows?

Есть два официальных пути. GCC ставится через MSYS2 командой pacman -S mingw-w64-ucrt-x86_64-gcc. Компилятор MSVC входит в Visual Studio Community и в «Средства сборки для Visual Studio» на странице загрузок Microsoft, в установщике нужна рабочая нагрузка «Разработка классических приложений на C++».

Чем GCC отличается от Clang?

Код по стандарту C собирается обоими. GCC поддерживает больше процессорных архитектур и стоит по умолчанию в большинстве Linux-дистрибутивов. Clang подробнее объясняет ошибки и часто сам подсказывает исправление, поэтому новичку с ним проще.

Можно ли скомпилировать программу на C онлайн?

Да. Для запуска с вводом данных и отладкой подходит OnlineGDB, для сравнения разных версий компиляторов есть Compiler Explorer (godbolt.org). Для проекта из нескольких файлов и работы с файлами на диске всё равно нужен компилятор на компьютере.

Подходит ли компилятор C для C++?

Да, популярные компиляторы собирают оба языка. У GCC для C++ есть команда g++, у Clang есть clang++, а cl из Visual Studio сам определяет язык по расширению файла: .c или .cpp.

Почему Visual Studio не собирает код из учебника по C?

Без ключа /std компилятор MSVC работает в режиме C89, а массивы переменной длины не поддерживает совсем. Включите /std:c17 в свойствах проекта или в команде cl, а массивы с размером из ввода замените на malloc.

Читайте Checkroi первым в Google
Добавьте Checkroi в избранные источники — и наши разборы курсов и обзоры школ будут показываться выше в вашей выдаче Google.
Оставить комментарий
0 комментариев
Форма комментария

Оставьте комментарий

Напишите, что думаете. Нам важно ваше мнение!