Сейчас на сайте
Сейчас на сайте 0 пользователей и 0 гостей.

Особенности работы с функциями в языке Си (C)

Функции в языке Си (C)

Функция - это самостоятельная единица программы, созданная для решения конкретной задачи. Функция в языке С играет ту же роль, что и подпрограммы или процедуры в других языках. Функциями удобно пользоваться, например, если необходимо обработать один и тот же код программы. Как и переменные, функции надо объявлять (declare). Функцию необходимо объявить до её использования. Запомните это простое правило - сначала объяви, а потом используй.

Каждая функция языка С имеет имя и список аргументов (формальных параметров).
Функции могут возвращать значение. Это значение может быть использовано далее в программе. Так как  функция может вернуть какое-нибудь значение, то обязательно нужно указать тип данных возвращаемого значения. Если тип не указан, то по умолчанию предполагается, что функция возвращает целое значение (типа int). После имени функции принято ставить круглые скобки (это касается вызова функции её объявления и описания). В этих скобках перечисляются параметры функции, если они есть. Если у функции нет параметров, то при объявлении и при описании функции вместо <список параметров> надо поставить void - пусто.

Основная форма описания (definition) функции имеет вид:

тип <имя функции>(список параметров)

{
тело функции

}

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

тип <имя функции>(список параметров);

Обратите внимание на то, что при описании функции после заголовка функции
тип <имя функции>(список параметров) точка с запятой не ставиться, а при объявлении функции точка с запятой ставиться.

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

<имя функции>(параметры);

или

<переменная>=<имя функции>(параметры);

При вызове функции так же ставиться точка с запятой. Почему надо объявлять функцию до использования? Дело в том, что для правильной работы кода функции машине надо знать тип возвращаемого значения, количество и типы аргументов. При вызове какой-либо функции копии значений фактических параметров записываются в стек, в соответствии с типами указанными в ее прототипе. Затем происходит переход в вызываемую функцию.

Функции возвращающие значение.

Давайте рассмотрим пример в котором опишем две функции, соответственно объявим их и последовательно вызовем. Но в этом примере для одной функции мы укажем тип возвращаемого значения - int.

/* Две наших функции */

#include <stdio.h> // Подключаем файл заголовков функций (их объявлений)

int x; // Объявляем переменную x (глобальная переменная)

void main(void)

{
void function1(void); // Объявляем функцию function1()

int function2(); // function2() будет возвращать значение типа int

x = 10; // Присваиваем переменной x значение 10

printf("До вызова функции function2() x равно %dn", x);

function1(); // Вызываем функцию function1()

x = function2(); // Вызываем функцию function2()

printf("После вызова функции function2() x равно %dn", x);

}

/* Описание наших функций */

void function1(void)

{

printf("Сделан вызов первой функцииn");

}

int function2(void)
{
int y; // Объявляем локальную переменную
y = x + 10;

return y; // Возвращаем значение y
}

Функции с параметрами.

Функции языка С могут иметь параметры. Эти параметры передаются в функцию и там обрабатываются.