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

2.2. Объявление и определение функции

Объявление функции задаёт имя функции, тип возвращаемого значения и количество и типы параметров, которые должны присутствовать при вызове функции. Указание void в качестве возвращаемого значения означает, что функция не возвращает значения.

Определением функции является объявление функции, в котором присутствует тело функции. Определение функции имеет следующий синтаксис: <тип> <имя> (<список формальных параметров>)

{

[<объявления>]

[<операторы>]

}

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

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

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

Примеры определения функции

double Cube(double x);

// // Объявление (прототип) функции

void main()

{

printf("%lf\n", Cube(5));

}

// Главная функция программы, которая печатает 53

double Cube(double x)

{

return x * x * x;

}

// Функция одного вещественного аргумента, которая возвращает вещественное значение,

// равное кубу аргумента

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

Функция должна возвращать значение, если она не объявлена как void. И наоборот – значение не может быть возвращено из функции, если она объявлена как void. Как и передача параметров, семантика возврата значения из функции идентична семантике инициализации. Возвращаемое значение задаётся инструкцией return.

int  f1() { }

void f2() { }

// Ошибка – не возвращается значение

// Правильно

int f3() { return 1; }

void f4() { return 1; }

// Правильно

// Ошибка – значение возвращается в функции void

int  f5() { return; }

void f6() { return; }

// Ошибка – не указано возвращаемое значение

// Правильно

Функция с типом void не может возвращать значение. Однако вызов функции с типом void не даёт значения, так что функция с типом void может использовать вызов функции с типом void как выражение в инструкции return.

void g() { ... }

void h() { return g(); }

// Правильно

Такая форма инструкции return важна при написании шаблонов функций, когда тип возвращаемого значения является параметром шаблона.