Перейти к основному содержимому

Первая программа на С

Разработчику Архитектору

Первая программа

Что происходит, когда вы запускаете программу на С

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

Этот процесс называется компиляцией. Он состоит из следующих шагов:

  1. Препроцессирование — обработка директив, начинающихся с символа #, таких как #include или #define. На этом этапе подключаются заголовочные файлы, раскрываются макросы, и исходный текст программы превращается в единый файл без ссылок на внешние ресурсы.
  2. Компиляция — перевод подготовленного текста программы в ассемблерный код, специфичный для целевой архитектуры (например, x86-64 или ARM).
  3. Ассемблирование — преобразование ассемблерного кода в объектный файл, содержащий машинные инструкции в двоичной форме, но ещё не готовый к запуску.
  4. Компоновка (линковка) — объединение одного или нескольких объектных файлов с библиотеками (например, стандартной библиотекой С) в единый исполняемый файл.

Результат этого процесса — исполняемый файл, который можно запустить на компьютере с совместимой операционной системой и архитектурой процессора.

Для выполнения этих этапов требуется специальная программа — компилятор. Наиболее распространённые компиляторы для С — это GCC (GNU Compiler Collection) и Clang. В среде Windows также часто используется компилятор от Microsoft — MSVC (Microsoft Visual C++).

Можно ли писать и запускать программы на С в Windows

Да, программы на С можно писать, компилировать и запускать в операционной системе Windows. Для этого существует несколько подходов, каждый из которых имеет свои особенности.

Подход 1: Использование MinGW-w64 и GCC

MinGW-w64 — это порт компилятора GCC и связанных инструментов для Windows. Он позволяет компилировать программы на С без необходимости устанавливать дополнительные подсистемы. MinGW-w64 генерирует нативные исполняемые файлы Windows (с расширением .exe), которые работают без установки дополнительных библиотек.

Чтобы начать работу с MinGW-w64:

  1. Перейдите на официальный сайт https://www.mingw-w64.org/ или используйте доверенный установщик, такой как WinLibs.
  2. Скачайте сборку MinGW-w64, соответствующую вашей архитектуре (обычно x86_64).
  3. Распакуйте архив в удобное место на диске, например, в папку C:\mingw64.
  4. Добавьте путь к папке bin внутри этой директории (например, C:\mingw64\bin) в переменную среды PATH вашей системы.
  5. Откройте новое окно командной строки и введите gcc --version. Если система отображает версию компилятора, установка прошла успешно.

После этого вы можете использовать команду gcc для компиляции программ прямо из терминала.

Подход 2: Использование Visual Studio Community

Visual Studio — полноценная интегрированная среда разработки от Microsoft. Бесплатная версия Community включает компилятор MSVC, отладчик, редактор кода и средства управления проектами.

Для работы с С в Visual Studio:

  1. Скачайте и установите Visual Studio Community с официального сайта https://visualstudio.microsoft.com/ru/.
  2. Во время установки обязательно выберите рабочую нагрузку «Разработка классических приложений на C++». Несмотря на название, эта нагрузка включает поддержку языка С.
  3. После установки создайте новый проект типа «Пустой проект».
  4. Добавьте новый файл с расширением .c (например, main.c) в проект.
  5. Напишите код на С и нажмите кнопку запуска. Visual Studio автоматически скомпилирует и выполнит программу.

Этот подход удобен тем, что предоставляет мощные инструменты отладки и навигации по коду, но требует больше ресурсов и времени на установку.

Подход 3: Использование Windows Subsystem for Linux (WSL)

Если вы предпочитаете работать в Unix-подобной среде, Windows предлагает подсистему WSL, которая позволяет запускать дистрибутивы Linux прямо внутри Windows.

Для этого:

  1. Включите компонент WSL через PowerShell (от имени администратора):
    wsl --install
  2. Установите дистрибутив из Microsoft Store, например Ubuntu.
  3. После первого запуска создайте учётную запись пользователя.
  4. Установите GCC в Linux-среде командой:
    sudo apt update && sudo apt install build-essential
  5. Теперь вы можете писать, компилировать и запускать программы на С так, как это делают в Linux.

Этот метод особенно полезен, если вы планируете в будущем работать с серверными или встраиваемыми системами, где доминируют Unix-подобные ОС.


Написание первой программы

Традиционно первая программа на любом языке программирования выводит на экран фразу «Hello, World!». Эта простая задача демонстрирует базовую структуру программы, подключение стандартных библиотек и использование функций ввода-вывода.

Вот как выглядит такая программа на языке С:

#include <stdio.h>

int main(void)
{
printf("Hello, World!\n");
return 0;
}

Разберём каждую часть этого кода по порядку.

Директива #include <stdio.h>

Эта строка — директива препроцессора. Она указывает компилятору включить содержимое заголовочного файла stdio.h в начало программы. Заголовочный файл содержит объявления функций, связанных со стандартным вводом и выводом: printf, scanf, puts, gets и других.

Без подключения stdio.h компилятор не узнает, что такое printf, и выдаст ошибку. В языке С все используемые функции должны быть объявлены до их вызова, и заголовочные файлы служат для этого.

Функция main

Каждая программа на С начинается с функции main. Это точка входа — место, с которого операционная система передаёт управление вашей программе после её запуска.

Объявление int main(void) означает следующее:

  • int — тип возвращаемого значения. Функция main возвращает целое число, которое передаётся операционной системе как код завершения программы.
  • main — имя функции.
  • (void) — список параметров. Слово void в скобках говорит о том, что функция не принимает аргументов извне.

Альтернативный вариант — int main(int argc, char *argv[]) — используется, когда программа должна обрабатывать аргументы командной строки. Для первой программы такой сложности не требуется.

Тело функции

Фигурные скобки { } ограничивают тело функции. Всё, что находится между ними, выполняется при запуске программы.

Внутри тела вызывается функция printf("Hello, World!\n");.

  • printf — функция вывода форматированной строки на стандартное устройство вывода (обычно терминал).
  • "Hello, World!\n" — строковый литерал. Он заключён в двойные кавычки и передаётся функции как аргумент.
  • \n — управляющая последовательность, обозначающая символ новой строки. Без неё курсор останется в конце выведенного текста, и следующий вывод начнётся сразу после него.

После вывода строки программа выполняет инструкцию return 0;.

  • return — команда, которая завершает выполнение функции и возвращает значение вызывающей стороне.
  • 0 — стандартное значение, означающее успешное завершение программы. Любое другое число обычно интерпретируется как ошибка.

Эта структура — минимально необходимая для корректной программы на С. Она соответствует стандарту языка и будет работать на любой совместимой системе.


Сохранение и компиляция программы

Чтобы превратить текст программы в исполняемый файл, нужно выполнить несколько шагов.

Шаг 1: Создание файла с исходным кодом

Откройте любой текстовый редактор: Блокнот (Notepad), Notepad++, Visual Studio Code, Sublime Text или другой. Важно использовать простой текстовый редактор, а не программы вроде Microsoft Word, которые добавляют невидимое форматирование.

Скопируйте в редактор код:

#include <stdio.h>

int main(void)
{
printf("Hello, World!\n");
return 0;
}

Сохраните файл с расширением .c, например, как hello.c. Расположение файла может быть любым — удобно создать отдельную папку для ваших проектов, например, C:\projects\hello.

Шаг 2: Открытие терминала

В Windows откройте Командную строку (cmd) или PowerShell. Перейдите в папку, где сохранён файл, с помощью команды cd:

cd C:\projects\hello

Убедитесь, что файл присутствует, выполнив:

dir

Вы должны увидеть hello.c в списке.

Шаг 3: Компиляция

Если вы установили MinGW-w64 и добавили GCC в PATH, выполните:

gcc hello.c -o hello.exe

Эта команда говорит компилятору:

  • взять файл hello.c как исходный код,
  • скомпилировать его,
  • создать исполняемый файл с именем hello.exe.

Если всё сделано правильно, команда завершится без сообщений. В той же папке появится файл hello.exe.

Шаг 4: Запуск программы

Введите в терминале:

hello.exe

Или просто:

hello

На экране появится:

Hello, World!

Программа завершится, и вы снова увидите приглашение командной строки.


Что делать, если возникли ошибки

Ошибки при компиляции — нормальная часть процесса обучения. Компилятор всегда сообщает о проблемах максимально точно.

Например, если вы забыли точку с запятой:

printf("Hello, World!\n")

Компилятор выдаст сообщение вроде:

error: expected ';' before 'return'

Это означает, что после вызова printf ожидалась точка с запятой, но она отсутствует. Исправьте строку, добавив ;, и повторите компиляцию.

Если вы написали prinft вместо printf, компилятор сообщит:

warning: implicit declaration of function 'prinft'
error: undefined reference to 'prinft'

Первое предупреждение говорит, что функция не объявлена. Вторая ошибка — линковщик не может найти реализацию этой функции. Исправьте опечатку, и программа заработает.

Главное правило: читайте сообщения компилятора внимательно. Они указывают номер строки и тип проблемы. Со временем вы научитесь быстро находить и исправлять такие ошибки.


Альтернативные способы запуска: Visual Studio и WSL

Хотя компиляция через командную строку с использованием GCC — это прямой и прозрачный путь, многие начинающие программисты предпочитают использовать интегрированные среды разработки (IDE), которые автоматизируют многие рутинные действия. Рассмотрим два популярных варианта в Windows: Visual Studio Community и Windows Subsystem for Linux (WSL).

Запуск через Visual Studio Community

После установки Visual Studio и выбора рабочей нагрузки «Разработка классических приложений на C++», вы можете создать проект следующим образом:

  1. Откройте Visual Studio.
  2. Выберите «Создать проект».
  3. В списке шаблонов найдите «Пустой проект» (Empty Project) и нажмите «Далее».
  4. Укажите имя проекта, например HelloWorld, и путь для сохранения.
  5. Нажмите «Создать».

Теперь проект создан, но он пока пуст. Чтобы добавить код:

  1. В Обозревателе решений (Solution Explorer) щёлкните правой кнопкой мыши по папке «Файлы исходного кода».
  2. Выберите «Добавить → Создать элемент».
  3. В открывшемся окне выберите «Файл C++ (.cpp)», но измените расширение на .c в поле имени файла — например, введите main.c.
  4. Нажмите «Добавить».

В открывшемся редакторе введите тот же код:

#include <stdio.h>

int main(void)
{
printf("Hello, World!\n");
return 0;
}

Теперь нажмите Ctrl+F5 (или кнопку «Запуск без отладки»). Visual Studio автоматически скомпилирует проект, соберёт исполняемый файл и запустит консольное окно с результатом.

Преимущество этого подхода — автоматическая настройка путей к компилятору, библиотекам и отладчику. Недостаток — зависимость от тяжёлой IDE, которая может отвлекать от понимания базовых принципов компиляции.

Запуск через WSL (Windows Subsystem for Linux)

Если вы активировали WSL и установили, например, Ubuntu, процесс становится почти идентичным тому, что используется в Linux:

  1. Откройте терминал WSL (например, через поиск Windows: «Ubuntu»).
  2. Создайте директорию для проекта:
    mkdir ~/hello && cd ~/hello
  3. Создайте файл с помощью текстового редактора, например nano:
    nano hello.c
  4. Вставьте код программы и сохраните файл (Ctrl+O, затем Enter; выход — Ctrl+X).
  5. Скомпилируйте программу:
    gcc hello.c -o hello
  6. Запустите:
    ./hello

На экране появится надпись Hello, World!.

Этот метод особенно ценен тем, что даёт доступ к Unix-среде, где большинство серверных и системных программ разрабатываются. Вы учитесь не только языку С, но и экосистеме, в которой он чаще всего применяется.


Сравнение подходов: какой выбрать?

КритерийGCC + MinGW-w64Visual StudioWSL + GCC
Требуемое место на диске~200 МБ5–10 ГБ~1–2 ГБ (плюс дистрибутив)
Скорость установкиБыстроДолгоСредняя
Понимание процесса сборкиПолноеЧастичное (автоматизация)Полное
Поддержка отладкиЧерез GDB (вручную)Встроенная, мощнаяЧерез GDB в терминале
Переносимость навыковВысокая (работает везде)Ограничена WindowsОчень высокая (Linux)
Подходит для новичковДа, при желании учитьсяДа, особенно визуальноДа, если знакомы с терминалом

Для первого знакомства с языком рекомендуется начать с MinGW-w64 и командной строки. Это позволяет увидеть каждый этап: от создания файла до запуска программы. После освоения основ можно перейти к IDE или WSL в зависимости от целей.


Советы по организации рабочего пространства

  1. Создайте отдельную папку для каждого проекта. Это предотвращает путаницу между файлами разных программ.
  2. Используйте осмысленные имена файлов. Например, calculator.c, temperature_converter.c, а не prog1.c.
  3. Комментируйте код. Даже в простых программах полезно писать комментарии, объясняющие, что делает каждая часть. Это помогает при возвращении к коду через неделю или месяц.
  4. Не бойтесь ошибок. Каждая ошибка — это шаг к пониманию. Компилятор — ваш союзник, а не противник.
  5. Экспериментируйте. Измените текст в printf, попробуйте вывести два сообщения, добавьте пустую строку. Наблюдение за результатом укрепляет интуицию.

Что дальше?

После успешного запуска первой программы открывается путь к изучению фундаментальных концепций языка С:

  • переменные и типы данных,
  • операторы и выражения,
  • условные конструкции (if, else),
  • циклы (for, while),
  • функции и модульность,
  • работа с массивами и строками,
  • указатели и управление памятью.

Каждая из этих тем строится на базе того, что вы уже сделали: написали, скомпилировали и запустили программу. Теперь вы не просто пользователь компьютера — вы человек, который заставляет его выполнять свои команды.

Язык С требует внимания к деталям, но вознаграждает глубоким пониманием того, как работает программное обеспечение. Первая программа — это не просто «Hello, World!». Это первый шаг в мир создания технологий.


См. также

Другие статьи этого же раздела в боковом меню (как на странице «О разделе»).