C – це урізана мова. Він надає доступ до “блакитного металу” (апаратного забезпечення). У ньому навіть немає функцій читання з клавіатури чи записи на екран. Якщо вам це потрібно, ви маєте реалізувати це самостійно.

Все, що виходить за межі абсолютного мінімуму, знаходиться в бібліотеках.

Ви знаєте бібліотеку stdio. Вона обробляє стандартне введення та виведення. Є інші бібліотеки математики. Обробка рядків. Роботи з часом. Вони існують для того, щоб вам не доводилося винаходити велосипед щоразу, коли ви починаєте новий проект.

Але навіщо зупинятись на тому, що надає стандарт?

Розміщення коду в бібліотеках робить його повторним використанням. Це дозволяє розбивати великі програми на керовані модулі. Простіше тестувати. Простіше налагоджувати. Ви можете брати код зі своїх старих проектів та вставляти його у нові без копіювання та вставки блоків логіки.

Погляньмо, як це зробити.

Вилучення логіки у функції

Візьмемо стандартну програму на C, яка заповнює масив випадковими числами та сортує їх. Ось вихідний код:

`

Цей код робить три речі. Він заповнює масив випадковими числами. Сортує їх за допомогою бульбашкового сортування. Виводить результат.

Щоб створити бібліотеку, що повторно використовується, нам потрібно ізолювати логіку сортування.

Крок перший: Узагальнення сортування

Вийміть код бульбашкового сортування. Перетворіть його на функцію.

Оскільки масив a та константа MAX є глобальними, функції спочатку не потрібні параметри. Вона також має повертати значення. Просто використовуйте локальні змінні для x, y та t.

`

Тепер оновіть main, щоб викликати цю функцію замість виконання вбудованого циклу.

`

Це працює. Але воно все ще прив’язане до глобального масиву.

Крок другий: Передача масиву

Ми можемо зробити функцію сортування по-справжньому універсальною. Передайте сам масив як параметр.

Сигнатура зміниться на:

`

Це вказує компілятор приймати цілісний масив будь-якого розміру. Тіло функції залишається тим самим. Вам потрібно просто оновити виклик в main :

`

Помітили щось дивне? Ми передаємо a, а не &a.

Незважаючи на те, що функція сортування змінює масив, нам не потрібний оператор отримання тут. Це здається нелогічним, якщо ви звикли до мов із передачею за значенням. Ви можете поставити запитання, чому це працює без явного використання вказівників у виклику.

Це пов’язано з тим, що C масиви перетворюються на покажчики при передачі в функції. Функція отримує посилання початку масиву в пам’яті. Саме тому вона може змінювати вихідні дані.

Розуміння цієї різниці є ключем до освоєння покажчиків. Без цього C-бібліотеки це просто статичні блоки коду. З ним ви будуєте модульні, портативні системи.