Определение функции.
Определение функции имеет следующий формат:
[спецификатор-класса-памяти] [спецификатор-типа]
описатель( [список-формальных-параметров]) тело функции
Определение функции задает имя, формальные параметры (типы и число ее формальных параметров), объявления и операторы, которые определяют действие функции. Последовательность объявлений и операторов называется телом функции. В определении функции также может быть задан тип значения, возвращаемого функцией (тип возврата), и класс памяти.
Функция возвращает значение, если ее выполнение заканчивается выполнением оператора return в теле функции следующего формата: return выражение;
Выражение вычисляется, преобразуется, если необходимо, к типу возвращаемого значения в определении (объявлении) функции, и управление возвращается в точку вызова.
Если оператор return не задан или не содержит выражения, функция не возвращает никакого значения. В этом случае спецификатор типа возвращаемого значения должен быть задан ключевым словом void, означающим отсутствие возвращаемого значения.
Тело функции -это составной оператор, содержащий операторы,
определяющие действия функции. Он также может содержать объявления
переменных, используемых в этих операторах. :
Все переменные, объявленные в теле функции, имеют класс памяти auto, если они не объявлены иначе, и являются локальными. Когда вызывается функция, то для локальных переменных отводится память в стеке и производится их инициализация (если она задана).
Параметры функции передаются по значению и могут рассматриваться как локальные переменные, место для которых распределяется при вызове функции, они инициализируются значениями переданных аргументов и теряются при выходе из функции. Поэтому в теле функции нельзя изменять значение параметра, так как функция работает с копиями аргументов.
Объявление функции (прототип).
Если нужно вызвать функцию до ее определения в этом файле или определение функции находиться в другом исходном файле, вызов функции следует предварить объявлением функции, т.е., задать прототип функции, который позволит компилятору выполнить проверку аргументов и возвращаемого значения. Прототип функции имеет следующий формат:
[спецификатор- класса-памяти] [спецификатор- типа]
описатель( [список- формальных -параметров])
[, список- описателей];
В отличие от формата определения функции в формате прототипа за заголовком функции следует точка с запятой (т.е. прототип функции не имеет тела), и заголовок функции может заканчиваться списком -описателей.
Правила использования остальных элементов формата прототипа те же, что и в определении функции.
Прототип-это явное объявление функции, которое предшествует определении функцию. Тип возврата, заданный в прототипе, должен согласовываться с типом возврата, заданным в определении.
Do'stlaringiz bilan baham: |