C за своєю природою є мінімалістичною мовою. Він обробляє найнеобхідніші речі та залишає інше на вашу відповідальність. Він не має вбудованих засобів введення з клавіатури або виведення на екран. Якщо ви бажаєте відобразити текст, вам потрібні зовнішні інструменти. Тут на сцену виходять бібліотеки програмування на C. Це фрагменти коду, що перевикористовується, які розширюють базові можливості мови.
Уявіть їх як плагіни для вашої логіки. Стандартна бібліотека stdio обробляє введення та виведення. Інші бібліотеки керують математичними операціями, рядками чи часом. Використання бібліотек розбиває ваш проект на керовані модулі. Це спрощує налагодження. Це також дозволяє брати робочий код зі старих проектів та переносити його до нових.
Чому модульний код має значення
Написання всього одного файлі швидко призводить до хаосу. Ви маєте сотні рядків, які важко відстежувати. Бібліотеки вирішують цю проблему, ізолюючи функціональність. Ви тестуєте одну функцію. Ви перевіряєте, що вона працює. Потім переходьте до наступного етапу.
В результаті виходить чистіший код. Він також є безпечнішим. Якщо з’являється помилка, ви знаєте, який модуль перевірити. Вам не потрібно шукати проблему у величезному монолітному скрипті.
Приклад: Рефакторинг випадкового сортування
Давайте розглянемо практичний приклад. Уявіть програму, яка генерує випадкові числа, сортує їх та виводить на екран. Вихідний код може виглядати як заплутаний клубок.
`
Цей код заповнює масив випадковими значеннями. Потім він застосовує сортування бульбашкою. Зрештою, він виводить відсортований список. Він працює. Але він не є перевикористовуваним. Логіка сортування жорстко закодована. Розмір масиву фіксовано. Ви не можете легко замінити алгоритм сортування або джерело даних.
Крок 1: Вилучення функції сортування
Перший крок до створення бібліотеки – це витяг. Візьміть цикл сортування бульбашкою і перетворите її на функцію. Оскільки масив a та константа MAX є глобальними в цьому фрагменті коду, функції не потрібні параметри для них. Їй також не потрібно повертати значення.
`
Зверніть увагу на параметри. Тепер функція приймає m – кількість елементів. Це робить її гнучкою. Можна відсортувати масив з 10 елементів. Або масив із 100 елементів. Ви просто передаєте розмір.
Основна функція стає простішою. Вона заповнює масив. Викликає сортування. Виводить результат.
`
Це вже краще. Але код все ще прив’язаний до глобального масиву a. Що, якщо ви захочете відсортувати інший масив? Або передати дані з іншого модуля?
Крок 2: Узагальнення для істинної перевикористання
Щоб зробити цей код по-справжньому готовим для бібліотеки, передавайте масив як параметр. Змініть функцію сигнатури.
`
Це вказує компілятор приймати масив цілих чисел будь-якого розміру. Тіло функції не змінюється. Ви просто передаєте дані в логіку замість того, щоб покладатися на глобальний стан.
Виклик у main трохи оновлюється. Ви передаєте ім’я масиву a та його розмір MAX.
`
Не використовуйте &a. Ви можете подумати, що вам потрібний покажчик на весь масив. Це негаразд. C імена масивів перетворюються на покажчики з їхньої перший елемент під час передачі у функції. Розуміння цієї різниці вимагає знання покажчиків. Але поки що просто знайте, що a достатньо.
Чому ця структура виграє
Ви




























