C — минималистичный язык. Он предоставляет лишь базовые средства программирования. У вас есть переменные, циклы и управление потоком выполнения. Вот и всё. Если вам нужно читать ввод с клавиатуры или выводить данные на экран, в C нет встроенных для этого функций. Вам приходится писать их самостоятельно или использовать библиотеки.
Именно поэтому библиотеки в C так важны. Это фрагменты кода, которые программисты выделяют из своих проектов, чтобы сделать их переиспользуемыми. Скорее всего, вы уже использовали стандартную библиотеку ввода-вывода, или stdio, не задумываясь об этом. Но помимо неё существуют библиотеки для работы с математикой, строками и временем. Вы также можете создавать свои собственные.
Разделение кода на модули упрощает его тестирование, отладку и понимание. Это также позволяет переиспользовать логику в разных программах. Давайте посмотрим, как взять монолитный скрипт и превратить часть его кода в переносимую функцию.
Извлечение логики из монолита
Рассмотрим следующую программу на C. Она заполняет массив случайными числами, сортирует его с помощью алгоритма пузырьковой сортировки и выводит результаты.
Логика сортировки здесь скрыта внутри main. Чтобы сделать её переиспользуемой, нам нужно извлечь пузырьковую сортировку.
Создание базовой функции
В этом примере массив a и константа MAX являются глобальными. Это означает, что функция сортировки не обязательно требует параметров для доступа к ним. Однако хорошие практики программирования диктуют использование локальных переменных для счетчиков циклов (x, y, t ), чтобы сделать функцию самодостаточной.
Вот отрефакторенный код. Мы изолировали логику сортировки в функцию bubble_sort.
Вы передаете количество элементов в bubble_sort вместо жестко заданного MAX. Это работает. Но код все еще привязан к глобальному массиву a.
Обобщение для истинной переиспользуемости
Функция является по-настоящему переиспользуемой только в том случае, если она не зависит от глобального состояния. Мы можем еще больше обобщить bubble_sort, передавая сам массив в качестве параметра.
Измените сигнатуру функции на:
Это указывает компилятору принимать массив целых чисел любого размера. Тело функции bubble_sort не меняется. Вам нужно лишь обновить вызов в main :
Обратите внимание, что мы не используем &a в вызове функции. Возможно, вы ожидаете передать адрес, поскольку сортировка изменяет массив, но в C массивы преобразуются в указатели при

















