Найти в Дзене
Информатика

Функции в C: как писать код, который не бесит 💻

Представь: ты пишешь программу для игры. Куча кода. И вдруг замечаешь — одна и та же логика повторяется раз пять. Копировать-вставить? Работает. Но потом находишь баг... и исправляешь его в пяти местах. Затем ещё баг. Опять пять мест. Nightmare mode включён 😱 Есть решение: функции. Это как чит-код для программистов. Функции — это кусочки кода, которые делают одну конкретную вещь. Написал раз — используешь сколько угодно. Аналогия из жизни: Представь, что каждый раз, когда хочешь послушать трек в Spotify, тебе нужно заново скачивать его, конвертировать, загружать в плеер... Бред, правда? Вот и в коде так же — зачем повторять одно и то же, если можно просто вызвать функцию. Вот функция, которая находит максимум из двух чисел: int max(int x, int y) {
if (x > y)
return x;
else
return y;
} Всё. Теперь можешь использовать её где угодно: printf("MAX = %d\n", max(5, 8)); // выведет 8 Можешь даже вкладывать функции друг в друга: max(max(a, b), max(c, d)) // найдёт мак
Оглавление
Как писать код
Как писать код

Представь: ты пишешь программу для игры. Куча кода. И вдруг замечаешь — одна и та же логика повторяется раз пять. Копировать-вставить? Работает. Но потом находишь баг... и исправляешь его в пяти местах. Затем ещё баг. Опять пять мест. Nightmare mode включён 😱

Есть решение: функции. Это как чит-код для программистов.

Зачем вообще это нужно? 🤔

Функции — это кусочки кода, которые делают одну конкретную вещь. Написал раз — используешь сколько угодно.

Аналогия из жизни:

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

Как это выглядит в коде?

Вот функция, которая находит максимум из двух чисел:

int max(int x, int y) {
if (x > y)
return x;
else
return y;
}

Всё. Теперь можешь использовать её где угодно:

printf("MAX = %d\n", max(5, 8)); // выведет 8

Можешь даже вкладывать функции друг в друга:

max(max(a, b), max(c, d)) // найдёт макс из 4 чисел

Круто? Ещё бы! 🔥

Два типа функций: с результатом и без

Два типа функций
Два типа функций

1️⃣ Функции с return — возвращают результат

Как калькулятор: засунул числа → получил ответ.

int nod(int a, int b) {
while (a != b) {
if (a > b)
a = a - b;
else
b = b - a;
}
return a; //
вот он, результат!
}

Это функция для нахождения НОД (наибольший общий делитель). Из алгебры помнишь? 😉

2️⃣ Функции void — просто делают действия

Как кнопка "like" в Instagram: нажал → сделалось, но ничего не вернулось.

void printTable(int n) {
for (int i = 1; i <= 10; i++) {
printf("%d x %d = %d\n", n, i, n * i);
}
}

Выведет таблицу умножения на экран. Никакого return — просто работа сделана ✅

Рекурсия
Рекурсия

Рекурсия — когда функция вызывает САМУ СЕБЯ 🤯

Звучит как глitch в Matrix, но это реально работает.

Пример: числа Фибоначчи (помнишь кроликов из матана?).

int fib(int n) {
if (n == 1 || n == 2)
return 1;
else
return fib(n - 1) + fib(n - 2); //
вызывает себя!
}

Как это работает:

  • Функция решает задачу, разбивая её на более простые версии этой же задачи
  • Пока не дойдёт до самого простого случая (базового)
  • А потом "раскручивается" обратно, собирая результат

Это как Inception, только в коде 🎬

Прототипы — чтобы компилятор не тупил

В C компилятор читает код сверху вниз. Если вызываешь функцию раньше, чем она написана — будет ошибка.

Решение: в начале файла пишешь прототип — типа анонс "скоро будет такая функция":

int max(int x, int y); // прототип

int main() {
printf("%d\n", max(5, 8)); //
теперь компилятор знает про max
return 0;
}

int max(int x, int y) { //
а вот и сама функция
return (x > y) ? x : y;
}

Удобно, когда функций много и ты не хочешь думать о порядке 🧠

Удобно
Удобно

Почему это мастхэв для любого программиста?

Не повторяешься — код короче и понятнее

Легко искать баги — проблема в одном месте, а не размазана по всему файлу

Можешь делиться — твою функцию может использовать друг в своём проекте

Думаешь проще — разбиваешь большую задачу на маленькие кусочки

Профтип: если копируешь код больше двух раз — пора делать функцию!

Попробуй сам 🎯

Напиши функцию, которая проверяет, чётное ли число:

int isEven(int n) {
// твой код здесь
// подсказка: используй оператор %
}

Или функцию для возведения в квадрат:

int square(int x) {
return x * x;
// легко!
}

А потом используй её, чтобы найти сумму квадратов чисел от 1 до 10. Получится? 💪

В сухом остатке

Функции — это основа всего. Без них код превращается в спагетти, где ничего не понятно и всё ломается от одного изменения.

С функциями ты пишешь код, который:

  • Легко читать 📖
  • Легко менять 🔧
  • Легко тестировать ✅
  • Легко переиспользовать ♻️

По сути, это лайфхак от профи для профи. А ты теперь в теме! 😎

💡 Полный учебный материал с примерами кода, иллюстрациями, практическими заданиями и разбором рекурсии — на нашем сайте.