Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
obp_shpory.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
260.1 Кб
Скачать

25. Прототип функции

Если нужно вызвать функцию до ее определения в этом файле или определение функции находится в другом исходном файле, то вызов функции следует предварить ее объявлением, т. е. задать прототип функции, который позволит компилятору выполнить проверку типов аргументов и возвращаемого значения.Формат прототипа:

<класс памяти><тип>имя (список формальных параметров);

В отличие от определения функции, в прототипе за заголовком сразу же следует точка с запятой, а тело функции отсутствует. Правила использования остальных элементов формата такие же, как при определении функции. Имена формальных параметров при объявлении функции можно не указывать, а если они указаны, то их область действия распространяется только до конца объявления.

Таким образом, прототип – это явное объявление функции, которое предшествует определению функции. Тип возвращаемого значения при объявлении функции должен соответствовать типу возвращаемого значения в определении функции. Хороший стиль программирования требует задания прототипа во всех случаях.

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

Если прототип функции не задан, а встретился вызов функции, то строится неявный прототип из анализа формы вызова функции. При этом список типов и числа параметров функции формируется на основании типов и числа фактических аргументов, используемых при данном вызове.

Вызов функции

Для обращения к функции используется имя функции.

Формат вызова:

Имя_функции (список),

где список представляет собой список фактических аргументов, передаваемых в функцию. Этот список может быть и пустым, но наличие круглых скобок обязательно.

Фактический аргумент может быть величиной любого простого типа, структурой, объединением, перечислением или указателем на объект любого типа. Массив и функция не могут быть использованы в качестве фактических аргументов, но можно использовать указатели на эти объекты.

Выполнение вызова функции происходит следующим образом.

Вычисляются выражения в списке фактических аргументов. Затем, если известен прототип функции, тип полученного фактического параметра сравнивается с типом соответствующего формального параметра. Если они не совпадают, то либо производится преобразование типов, либо формируется сообщение об ошибке. Число выражений в списке фактических аргументов должно совпадать с числом формальных параметров, если только функция не имеет переменного числа параметров. В последнем случае проверке подлежат только обязательные параметры. Если в прототипе функции указано, что ей не требуются параметры, а при вызове они указаны, формируется сообщение об ошибке. Происходит присваивание значений или адресов фактических аргументов соответствующим формальным параметрам. Управление передается на первый оператор функции. Выполняются действия, указанные в теле функции. Выполнение оператораreturn в теле функции возвращает управление и вычисленное значение в вызывающую функцию. При отсутствии оператора return управление возвращается после выполнения последнего оператора тела функции, а возвращаемое значение не определено.

Пример программы

Найти корни уравнения  x = sinx / 4 + 0,27 методом итераций с точностью e.

Расчетная формула x1 = sin2 x0 / 4 + 0,27, где условие нахождения искомого корня |x1 – x0| < e – x0 - начальное значение корня уравнения (обычно принимается равным нулю), x- значение корня уравнения на следующей итерации, e - заданная точность вычисления корня (например, 0.001).

В программе используется старый стиль определения функции:

#include <stdio.h>

#include <math.h> /*Подключение стандартных библиотек*/

#define EPS 0.001 /*Задание точности вычисления корня*/

float root(x, E) /*Заголовок функции с именем root*/

float x,E; /*Описание аргументов функции*/

{          /*Тело функции*/

float x1;

for (x1=pow(sin(x),2)*.25+.27;

fabs (x1−x)>E;

x=x1,

x1=pow(sin(x),2)*.25+.27);

return (x1);

}          /*Завершение описания функции root*/

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]