Язык C с нуля: Hello World, gcc и первый файл

В этом уроке мы начнем язык C с нуля: создадим файл main.c, скомпилируем его через gcc, запустим готовую программу и спокойно разберем, что делают #include, main, printf и return 0. Главное отличие от Python, JavaScript или PHP здесь в том, что C-файл не «запускается» напрямую. Его сначала нужно превратить в исполняемую программу

К концу урока у вас будет не просто строка Hello, World!, а понятная схема: исходный код -> компиляция -> исполняемый файл -> запуск

Что получится в конце

Мы напишем файл main.c:

#include <stdio.h>

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

Скомпилируем:

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

Запустим:

./hello

И увидим:

Hello, World!

На Windows имя файла может быть hello.exe, а запуск зависит от терминала. Но идея та же: компилятор сделал отдельную программу, и уже ее мы запускаем

Что нужно заранее

Нужны три вещи: текстовый редактор, терминал и компилятор C. В примерах используется gcc, но для первого урока подойдет и clang

Проверьте GCC:

gcc --version

Или Clang:

clang --version

Если ни одна команда не работает, сначала нужен урок Как установить компилятор C: GCC, Clang и онлайн-запуск. Онлайн-компилятор тоже подойдет для знакомства, но локальный запуск лучше показывает реальную механику: файл, команда компиляции, бинарник, запуск из терминала

Создаем папку и файл

Сделайте отдельную папку:

mkdir c-first
cd c-first

Создайте файл main.c. Расширение .c важно: так редактор, компилятор и человек понимают, что это исходный файл на языке C

Вставьте код:

#include <stdio.h>

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

Сохраните файл. Теперь в папке должен лежать один файл:

main.c

Компиляция: почему это не запуск скрипта

В языках вроде Python часто пишут:

python main.py

И файл выполняется интерпретатором. В C путь другой. Вы сначала просите компилятор собрать программу:

gcc main.c -o hello

main.c — исходный файл. -o hello задает имя готовой программы. Если не указать -o, GCC обычно создаст файл a.out, и новичок потом не понимает, откуда он взялся

Для учебного кода лучше сразу включить предупреждения:

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

-Wall и -Wextra включают много полезных предупреждений. -std=c17 просит компилятор проверять код по стандарту C17. Это не делает вас экспертом по стандартам, но помогает держать пример предсказуемым

Запуск готовой программы

После компиляции появится файл hello. На macOS и Linux запуск выглядит так:

./hello

Почему не просто hello? Текущая папка обычно не входит в список мест, где shell ищет команды. ./hello означает: запусти файл hello из текущей папки

Если после запуска видите:

Hello, World!

первый цикл завершен: написали код, скомпилировали, запустили

Что делает #include <stdio.h>

Строка:

#include <stdio.h>

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

Символ # означает директиву препроцессора. Препроцессор работает до основной компиляции: подставляет заголовочные файлы, обрабатывает макросы и условные включения. В первом уроке достаточно запомнить: хотите использовать printf — подключите stdio.h

Что такое int main(void)

Функция:

int main(void)

это точка входа программы. Когда операционная система запускает вашу программу, выполнение начинается с main

int перед main означает, что функция возвращает целое число. Это число становится кодом завершения программы

void в скобках означает: функция main не принимает аргументов. Есть и другой вариант с аргументами командной строки, но он появится позже:

int main(int argc, char *argv[])

Для первого файла вариант int main(void) самый спокойный и ясный

Фигурные скобки и тело функции

Тело функции находится между { и }:

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

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

Если забыть ; после printf, компилятор покажет ошибку. C не пытается угадать, где инструкция закончилась

printf и символ новой строки

Строка:

printf("Hello, World!\n");

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

Попробуйте временно заменить строку на:

printf("Hello, ");
printf("C!\n");

После компиляции и запуска вы увидите:

Hello, C!

Так становится видно: программа выполняет инструкции сверху вниз

return 0

Строка:

return 0;

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

В маленьких современных примерах return 0 иногда опускают, потому что для main это допускается. Но новичку лучше писать явно. Так сразу видно: программа не просто «дошла до конца», она завершилась успешно

Меняем пример под себя

Добавим переменную:

#include <stdio.h>

int main(void)
{
    char name[] = "Алия";

    printf("Hello, %s!\n", name);
    printf("This is your first C program.\n");

    return 0;
}

Здесь char name[] — массив символов, то есть строка в стиле C. Подробно строки будут в уроке [Массивы и строки в C: индексы, char[] и нулевой символ](https://aglamov.biz/jazyki-programmirovanija/si/massivy-i-stroki-v-c). Сейчас важно только увидеть: %s в printf обозначает место, куда будет подставлена строка

Скомпилируйте снова:

gcc -Wall -Wextra -std=c17 main.c -o hello
./hello

Ожидаемый вывод:

Hello, Алия!
This is your first C program.

Если у терминала проблемы с кириллицей, временно используйте латиницу. Это не ошибка языка C, а вопрос кодировки терминала и окружения

Мини-карта процесса компиляции

Упрощенно процесс выглядит так:

main.c -> препроцессор -> компилятор -> линкер -> hello

Препроцессор обрабатывает #include. Компилятор переводит C-код в машинно-близкое представление. Линкер связывает ваш код со стандартной библиотекой, где живет printf. В конце получается исполняемый файл

На первом уроке не нужно знать все детали. Но полезно понимать, почему ошибка может появиться на разных этапах: не найден stdio.h, синтаксис сломан, не найден main, линкер не смог собрать программу

Частые ошибки и порядок проверки

gcc: command not found. Компилятор не установлен или терминал его не видит. Проверьте установку

main.c: No such file or directory. Вы запускаете команду не в той папке или файл называется иначе

expected ';' before 'return'. Где-то выше забыта точка с запятой, часто после printf

undefined reference to main. В программе нет правильной функции main, она названа иначе или файл не тот

stdio.h not found. Проблема с установкой компилятора или стандартных заголовков

Permission denied при запуске. Проверьте, что вы запускаете собранный файл и используете правильную команду. На macOS/Linux обычно ./hello

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

Что может быть еще интересно по этой теме

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

GCC или Clang выбрать новичку? Для первых уроков подойдет любой. GCC часто встречается в Linux-материалах, Clang стандартно доступен в экосистеме macOS через developer tools

Почему C до сих пор изучают? Потому что он близко показывает, как программа превращается в машинный код, как устроены память, строки, массивы и работа с файлами. Это полезно даже тем, кто потом уйдет в C++, Rust, Go или embedded

Можно ли писать C в онлайн-компиляторе? Да, для первых экспериментов. Но локальный компилятор лучше учит реальной сборке: файлы, флаги, warnings, запуск бинарника

Что почитать дальше по C

Оцените статью
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x