Основы программирования на C++, PASCAL
4.8. Функции
А теперь нам предстоит разобраться с вопросом о том, как в Си/Си++ реализуется механизм подпрограмм. Вспомним о том, что в Паскале существуют две разновидности подпрограмм: подпрограммы-процедуры и подпрограммы-функции. Тот и другой тип подпрограмм описывается внутри основной программы и компилируется вместе с ней. Реализация механизма подпрограмм в Си/Си++ существенно отличается от аналогичной реализации в Паскале.
Определение функции. Обращение к функции. В Си используется лишь один тип подпрограмм — функция. Здесь вообще не принято употреблять термин «подпрограмма», потому что функция является основной программной единицей в Си, минимальным исполняемым программным модулем. Всякая программа обязательно включает в себя основную функцию с именем main. Если в программе используются и другие функции, то они выполняют роль подпрограмм.
Рассмотрим пример. Требуется составить программу нахождения наибольшего значения из трех величин — max (a, b, с). Для ее решения можно использовать вспомогательный алгоритм нахождения максимального значения из двух, поскольку справедливо равенство: max (а, b, с) = max (max (a, b, с).
Вот программа решения этой задачи с использованием вспомогательной функции.
Пример 1.
Формат определения функции следующий:
тип имя_функции (спецификация_параметров)
{тело_ функции}
Тип функции — это тип возвращаемого функцией результата. Если функция не возвращает никакого результата, то для нее указывается тип void.
Имя функции — идентификатор, задаваемый программистом или main для основной функции.
Спецификации параметров — это либо «пусто», либо список имен формальных параметров функции с указанием типа для каждого из них.
Тело функции — это либо составной оператор, либо блок.
Здесь мы впервые встречаемся с понятием блока. Признаком блока является наличие описаний программных объектов (переменных, массивов и т.д.), которые действуют в пределах этого блока. Блок, как и составной оператор, ограничивается фигурными скобками.
В Си действует правило: тело функции не может содержать в себе определения других функций. Иначе говоря, недопустимы внутренние функции, как это делается в Паскале. Из всякой функции возможно обращение к другим функциям, однако они всегда являются внешними по отношению к вызывающей.
Оператором возврата из функции в точку ее вызова является оператор return. Он может использоваться в функциях в двух формах: