Подпрограмма - это небольшой фрагмент кода основной программы, который выполняет определенное задание/действие.
В свою очередь подпрограммы делятся на два вида:
Функции (после выполнения возвращают в программу значения, полученные в результате выполнения самих себя);
Процедуры (ничего не возвращают). Хочу сразу внести ясность, в Сишке процедура возвращает значение типа void (пустое значение). Поэтому в учебниках по СИ все подпрограммы не зависимо от того, возвращают ли они значения или нет, называются функциями.
Main, как бы это странно не звучало – это функция. Она возвращает в операционную систему (в большую программу) некое значение – результат своей работы.
Функция состоит из заголовка и тела функции.
Заголовок функции состоит из трех частей:
- тип значения, которое возвращает функция. Например int. После выполнения, функция возвращает в программу, из которой её вызывали, целое значение. Для того, чтобы функция ничего не возвращала пишем тип void.
- имя функции.Совет по поводу придумывания имен функций – имя должно нести смысл и быть осознанным, чтобы и другой человек, посмотрев на название функции – понял, что она выполняет. Например: void init_timer1 (void); void calk_different_variables (void);
- типы и количество аргументов (параметров) функции (задаются в скобках).Иными словами в скобках указываются значения, которые будут переданы в функцию. Если же никаких параметров функция принимать не будет, то пишем void.
Далее в фигурных скобках задаём тело функции. Мы даём вводные того, как должна работать функция. Важный момент, если подпрограмма возвращает результат своей деятельности (какое-либо значение) то в конце тела функции должна стоять команда (инструкция) return.
Напишем небольшую программку.
Теперь представим, что созданная нами функция function_comparison принимает два параметра (два аргумента) целого типа, которым присвоены имена w и d. В теле самой функции w и d используются, как обычные переменные. Параметры записанные в заголовке функции называются формальными.
Перед тем, как использовать функцию её необходимо объявить. Объявление обычно происходит после подключения файлов библиотек.
#include <_________ . h> - команда «приказывает» компилятору включить информацию из стандартной библиотеки в код будущей прошивки.
int function_comparison (int w, int d); - объявление функции.
После того, как в основной программе происходит вызов функции function_comparison (2,3); программа начинает искать объявление функцию с именем function_comparison, которая примет эти параметры. Параметры, что передаются в функцию в основной программе, называются фактическими параметрами.
Если объявления функции не было – программа не с компилируется, а если было – передаст управление вызываемой функции. После вызова, подпрограмма создаёт переменные w и d и присваивает им значение 2 и 3. Когда всё выполнено – управление переходит к основной программе, а переменные w и d удаляются.
Когда в основной программе происходит вызов функции function_comparison (a,b), то снова создаются переменные w и d и им присваиваются значение переменных a и b (4 и 2 соответственно). Выполнение функции и выдача результата никак не повлияют на значение оригинальных переменных.
Еще один интересный момент. Область видимости переменных.
Переменные w и d доступны только внутри функции, в которой они объявлены (то есть в теле функции function_comparison). За пределами функции эти переменные не существуют.
Если представить, что какой-то злой рок произойдет и переменные с названием w и d будут объявлены в основной программ, и в функции function_comparison – не стоит беспокоится – это совершенно разные переменные и ничего общего между ними не будет.
При объявлении функции можно не указывать имена конкретных формальных параметров, а только их типы и количество.
Несколько слов об операторе return. Его можно и не использовать. Нужно присвоит результат, который необходимо вывести глобальной переменной и после завершения функции благополучно им воспользоваться.
Основное предназначение оператора return - прекращения выполнения функции. Он схожий с оператором break в циклах.
Продолжение следует...